comboBox数据库动态生成项目,但其text赋空值出错

xztslsz 2008-11-03 08:38:04
comboBox数据库动态生成项目,代码如下:
string sql="SELECT 进货店 from buy group by 进货店 order by 进货店";
OleDbCommand cmd=new OleDbCommand(sql,this.oleDbConnection1);
OleDbDataAdapter da=new OleDbDataAdapter(cmd);
DataSet ds=new DataSet();
da.Fill(ds,"buy");
buyshopcomboBox.DataSource=ds;
buyshopcomboBox.DisplayMember="buy.进货店";
运行时,下拉项目正确。但执行其text赋空值时,语句如下:
buyshopcomboBox.Text="";
窗体里的该控件内容已经空了,但是在取值时,得到的却是第一个项目的值,不是我赋的空值。随便取该项目的任意一项,手动删除后,该控件的值就是空的,为什么用上面的赋空值的语句不对呢?
...全文
251 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xztslsz 2008-11-03
  • 打赏
  • 举报
回复
我在给赋空值前加入这句:comobobox.selectindex=-1
就对了,
dahai99007 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xztslsz 的回复:]
我又试了,把buyshopcomboBox.DataSource=ds;
buyshopcomboBox.DisplayMember="buy.进货店";
改为:buyshopcomboBox.DataSource=ds.Tables[0];
buyshopcomboBox.DisplayMemberds.Tables[0].Columns[0].ToString();
还是不对,输出不为空。
[/Quote]
你把你这段代码都贴出来让大家看看,每次都整这么两句能看出什么呀?
dahai99007 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 csrwgs 的回复:]
LZ的问题是:
comboBox.Text是与combobox.Selectedindex绑定的
你只是将text=“”,但是selectedindex还是会指定到第一个
[/Quote]
照你的意思我3楼的那段代码:
this.comboBox1.DisplayMember = ds.Tables[0].Columns[0].ToString();
ds.Tables[0].Columns[0]里边的数据为“男”和"女"
private void button7_Click(object sender, EventArgs e)
{
//this.comboBox1.DataSource = null;
string a = "xyz";
this.comboBox1.Text = "";
a = this.comboBox1.Text;
MessageBox.Show(a);
}

show出来的应该是”男“?不是""?
xztslsz 2008-11-03
  • 打赏
  • 举报
回复
我又试了,把buyshopcomboBox.DataSource=ds;
buyshopcomboBox.DisplayMember="buy.进货店";
改为:buyshopcomboBox.DataSource=ds.Tables[0];
buyshopcomboBox.DisplayMemberds.Tables[0].Columns[0].ToString();
还是不对,输出不为空。
dahai99007 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xztslsz 的回复:]
我用你的代码:
private void button7_Click(object sender, EventArgs e)
{
//this.comboBox1.DataSource = null;
string a = "xyz";
this.comboBox1.Text = "";
a = this.comboBox1.Text;
MessageBox.Show(a);
}
输出的不 是空值,还是下拉框中的第一项的值。
[/Quote]
你是哪儿搞错了吧?再一步一步的调试下看看。
lizhengnan 2008-11-03
  • 打赏
  • 举报
回复
comobobox.selectindex=-1
csrwgs 2008-11-03
  • 打赏
  • 举报
回复
LZ的问题是:
comboBox.Text是与combobox.Selectedindex绑定的
你只是将text=“”,但是selectedindex还是会指定到第一个
dahai99007 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xztslsz 的回复:]
我用语句buyshopcomboBox.DataSource=null; 可以设置为空,我是在MouseUp事件中把comboBox绑定到数据库的,但是程序执行时,每当鼠标单击时,下拉框只有一个内容(即第一项),要选其他项必须点其右边的上下小按钮,当我第二次单击时,下拉框中显示的就是多项了,为什么第一次只显示一个项目呢?
[/Quote]
ComboBox 显示与一个 ListBox 组合的文本框编辑字段,使用户可以从列表中选择项,也可以输入新文本。ComboBox 的默认行为是显示一个编辑字段,该字段具有一个隐藏的下拉列表。DropDownStyle 属性确定要显示的组合框的样式。可以输入一个值,该值提供以下功能:简单的下拉列表(始终显示列表)、下拉列表框(文本部分不可编辑,并且必须选择一个箭头才能查看下拉列表框)或默认下拉列表框(文本部分可编辑,并且用户必须按箭头键才能查看列表)。若要显示用户不能编辑的列表,请使用 ListBox 控件。

若要在运行时向列表添加对象,请用 AddRange 方法分配一个对象引用数组。然后,列表显示每个对象的默认字符串值。可以用 Add 方法添加单个对象。

除了显示和选择功能外,ComboBox 还提供一些功能,使您得以有效地将项添加到 ComboBox 中以及在列表的项内查找文本。使用 BeginUpdate 和 EndUpdate 方法,可以将大量项添加到 ComboBox 中,而无需在每次将一个项添加到列表中时都重新绘制该控件。FindString 和 FindStringExact 方法使您得以在列表中搜索包含特定搜索字符串的项。

可以使用这些属性管理列表中当前选定的项,使用 Text 属性指定编辑字段中显示的字符串,使用 SelectedIndex 属性获取或设置当前项,以及使用 SelectedItem 属性获取或设置对对象的引用。

你可以参考下msdn
xztslsz 2008-11-03
  • 打赏
  • 举报
回复
我用你的代码:
private void button7_Click(object sender, EventArgs e)
{
//this.comboBox1.DataSource = null;
string a = "xyz";
this.comboBox1.Text = "";
a = this.comboBox1.Text;
MessageBox.Show(a);
}
输出的不 是空值,还是下拉框中的第一项的值。
xztslsz 2008-11-03
  • 打赏
  • 举报
回复
我用语句buyshopcomboBox.DataSource=null; 可以设置为空,我是在MouseUp事件中把comboBox绑定到数据库的,但是程序执行时,每当鼠标单击时,下拉框只有一个内容(即第一项),要选其他项必须点其右边的上下小按钮,当我第二次单击时,下拉框中显示的就是多项了,为什么第一次只显示一个项目呢?
dahai99007 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xztslsz 的回复:]
取值的代码是:buyshopcomboBox.Text,
想问一下,如果先把buyshopcomboBox的DataSource释放,回来再用的时候是不是又得再绑定?
[/Quote]
是啊,如果再用的话再重新绑定。
你看下下边的代码,和你的差不多:
 private void button6_Click(object sender, EventArgs e)
{
string selectSql = "select A from testtable1";
string connectStr = "user id=manager;password=foton;data source=ecudb";
using (System.Data.OracleClient.OracleConnection connection = new System.Data.OracleClient.OracleConnection(connectStr))
{
System.Data.OracleClient.OracleCommand command = new System.Data.OracleClient.OracleCommand(selectSql, connection);
System.Data.OracleClient.OracleDataAdapter da = new System.Data.OracleClient.OracleDataAdapter(command);
DataSet ds = new DataSet();
da.Fill(ds, "table1");
this.comboBox1.DataSource = ds.Tables[0];
this.comboBox1.DisplayMember = ds.Tables[0].Columns[0].ToString();
}
}

private void button7_Click(object sender, EventArgs e)
{
//this.comboBox1.DataSource = null;
string a = "xyz";
this.comboBox1.Text = "";
a = this.comboBox1.Text;
MessageBox.Show(a);
}

这样的话,MessageBox.Show(a);显示的值就是空值。但是下拉框里边还是有绑定的内容的,要想没有就把上边注释的加上,再用的时候重新绑定。
xztslsz 2008-11-03
  • 打赏
  • 举报
回复
取值的代码是:buyshopcomboBox.Text,
想问一下,如果先把buyshopcomboBox的DataSource释放,回来再用的时候是不是又得再绑定?
dahai99007 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 xztslsz 的帖子:]
comboBox数据库动态生成项目,代码如下:
string sql="SELECT 进货店 from buy group by 进货店 order by 进货店";
OleDbCommand cmd=new OleDbCommand(sql,this.oleDbConnection1);
OleDbDataAdapter da=new OleDbDataAdapter(cmd);
DataSet ds=new DataSet();
da.Fill(ds,"buy");
buyshopcomboBox.DataSource=ds;
buyshopcomboBox.DisplayMember="buy.进货店";
运行时,下拉项目正确。但执行其text赋空值时,…
[/Quote]
不知道你取值的代码是什么样的!可以贴出来看下啊。
你在给buyshopcombobox.text赋值前应该先把buyshopcomboBox的DataSource释放,
buyshopcomboBox.DataSource=null;
然后再buyshopcomboBox.Text="";
这样下拉框里边就不再有你绑定的数据了。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧