//初始化comboBox值
private void ModifyUser_Load(object sender, EventArgs e)
{
string SqlConn = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
SqlConnection MyConn = new SqlConnection(SqlConn);
SqlCommand MyCmd = new SqlCommand();
string SqlStr = "Select Name,ID from AreaTable";
MyCmd.CommandText = SqlStr;
MyCmd.Connection = MyConn;
SqlDataAdapter da = new SqlDataAdapter(MyCmd);
DataTable dt = new DataTable();
MyConn.Open();
da.Fill(dt);
//人为插入一行在combobox前面.
DataRow dr = dt.NewRow();
dr["Name"] = "请选择所在小区";
dr["ID"] = -1;
dt.Rows.InsertAt(dr, 0);
cbArea.DataSource = dt;
cbArea.DisplayMember = "Name";
cbArea.ValueMember = "ID";
MyConn.Close();
}
下面是我做试验的临时按钮。
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(cbArea.Items[cbArea.SelectedIndex].ToString()); //就是这一句,总是返回system.data.datarowview
//MessageBox.Show(cbSrvArea.Items[cbSrvArea.SelectedIndex].ToString()); //这一句是窗口上另一个下拉列表框,它就能返回正确值。
}
我现在是彻底服气了,为啥总是返回这个值呢???
敬请高手能够解答。在线等待中.......................
26 个解决方案
#1
说明你第一个返回值是空啊
#2
cbArea.SelectItem.value
#3
又做了个试验,我把这个LOAD事件对控件的初始化代码去掉,手工在设计期人为加上“one ,two,three"三项,然后再测试,就能返回我所期望的One,two,three值。这样看来,那就是在窗口初始化代码有问题了喽?可这段初始化代码在其它地方也是正确的,而且我的测试代码做如下修改也可能得到正确的值,证明初始化代码为这个下拉列表框的赋值是正确的。
MessageBox.Show(cbArea.Text); //这样当我选择不同的值时,能正确显示,说明初始化是正确的。
MessageBox.Show(cbArea.SelectedValue.toString()); 这样时也能正确的显出出-1,1,2等ValueMember中的值来,
郁闷啊...........
MessageBox.Show(cbArea.Text); //这样当我选择不同的值时,能正确显示,说明初始化是正确的。
MessageBox.Show(cbArea.SelectedValue.toString()); 这样时也能正确的显出出-1,1,2等ValueMember中的值来,
郁闷啊...........
#4
cbArea.Items[cbArea.SelectedIndex].Text, //显示文字
或者
cbArea.Items[cbArea.SelectedIndex].Value;//值
或者
cbArea.Items[cbArea.SelectedIndex].Value;//值
#5
我随便选择哪一项,都是返回同一个值"System.data.datarowview"
#6
没DataBind()
加个
加个
cbArea.DataBind()
#7
这两个方法我都试过了,能返回正确的值来,总是产生我的那个问题的原因是什么呢?而且我要做的事是先初始化这个comboBox,然后根据数据库中的某个值,再确定这个comboBox的SelectedIndex,即让comboBox不总是显示第一个选项。
#8
你的没有读到值啊
#9
我是在WinForm中设计的中,不需要databind(),如果在WebForm设计中,才需要DataBind()
#10
如果是空值的话,它还能show 出来吗?
如果检查没有什么错误的话,把那个Combox删了,重新拖一个
#11
cbArea.Items[cbArea.SelectedIndex] // 代表对象类型名
cbArea.Items[cbArea.SelectedIndex].Text // 代表对象的文本
cbArea.Items[cbArea.SelectedIndex].Value // 代表对象的值
cbArea.Items[cbArea.SelectedIndex].Text // 代表对象的文本
cbArea.Items[cbArea.SelectedIndex].Value // 代表对象的值
#12
我也觉得返回的值是这该对象的类型名,即System.data.datarowview,可是同样的代码即:
MessageBox.Show(cbArea.Items[cbArea.SelectedIndex].ToString()); //就是这一句,总是返回system.data.datarowview
//MessageBox.Show(cbSrvArea.Items[cbSrvArea.SelectedIndex].ToString()); //这一句是窗口上另一个下拉列表框,它就能返回正确值。
为什么第一句返回的是对象名,第二句就能返回正确的期望值呢?
#13
而且你的第二句:cbArea.Items[cbArea.SelectedIndex].Text // 代表对象的文本,是错误的吧,IDE自动提示中没有这个提示。只有ToString()
#14
换个角度讲,如果我们要浏览cbArea的第一项的文本值,下面的代码正确吗?
for (int i=0;i<=cbArea.Count-1;i++)
{
MessageBox(cbArea.Items[i].toString());
}
for (int i=0;i<=cbArea.Count-1;i++)
{
MessageBox(cbArea.Items[i].toString());
}
#15
不完全正确;
-------------------
如果你是
comboBox1.Items.Add("小五");
comboBox1.Items.Add("小五1");
comboBox1.Items.Add("小五2");
这样就正确了;
如果是 设置 DataSource 的返回就是"system.data.datarowview" 这样就不正确;
#16
这一段代码我将两个comboBox 都试过了,一个可以返回正确值,一个还是返回的是System.data.datarowview,区别是返回正确值的comboBox中ITEMS的值是手动输入的,返回错误值的是初始化代码初化过的那个comboBox
#17
正解
#18
使用这个"comboBox1.Text" 可以保证获取都是当前显示的文字;
#19
那如果我设置了DataSource,而且我就是想获得我想获得或设置该comboBox的值该怎能么办呢?
#20
设置了数据源后,cbArea.Items[i]实际是datarowview对象
DataRowView drv =(DataRowView)comboBox1.Items[i];
Console.WriteLine(drv["Name"]);
还原对象后要指定列名或索引来获取特定列的值。
DataRowView drv =(DataRowView)comboBox1.Items[i];
Console.WriteLine(drv["Name"]);
还原对象后要指定列名或索引来获取特定列的值。
#21
cbArea.SelectValue
cbArea.Text
cbArea.SelectText
.....
cbArea.Text
cbArea.SelectText
.....
#22
现在的问题变成了,如果comboBox中的内容是设置了DataSource、DisplayMember和valueMember后,该怎样获取和设置它的值的问题了????
#23
改变数据源,而不是改变comboBox的Item。
重新绑定
comboBox1.DataSource=null;
comboBox1.DataSource=aaa;
重新绑定
comboBox1.DataSource=null;
comboBox1.DataSource=aaa;
#24
获取
-------------
显示的文字用: comboBox1.Text;
获取值:comboBox1.SelectedValue.ToString()
设置:
修改绑定的对象如:(dataTable) 增加一列(dataRow),重新绑定;
#25
果然是高手,解释的很好,我又做了一下试验,非常成功。想想也正确的,既然comboBox跟dataTable绑定后,获的一行Items[i]当然是与绑定的DataTable中的一行,也就是DataRowView了。
#26
非常感谢wo6522317和zzx509两位高手,我马上结贴去,现在总算对下拉列表框有了一个新的认识。对绑定数据源的控件有了一个新的认识。
#1
说明你第一个返回值是空啊
#2
cbArea.SelectItem.value
#3
又做了个试验,我把这个LOAD事件对控件的初始化代码去掉,手工在设计期人为加上“one ,two,three"三项,然后再测试,就能返回我所期望的One,two,three值。这样看来,那就是在窗口初始化代码有问题了喽?可这段初始化代码在其它地方也是正确的,而且我的测试代码做如下修改也可能得到正确的值,证明初始化代码为这个下拉列表框的赋值是正确的。
MessageBox.Show(cbArea.Text); //这样当我选择不同的值时,能正确显示,说明初始化是正确的。
MessageBox.Show(cbArea.SelectedValue.toString()); 这样时也能正确的显出出-1,1,2等ValueMember中的值来,
郁闷啊...........
MessageBox.Show(cbArea.Text); //这样当我选择不同的值时,能正确显示,说明初始化是正确的。
MessageBox.Show(cbArea.SelectedValue.toString()); 这样时也能正确的显出出-1,1,2等ValueMember中的值来,
郁闷啊...........
#4
cbArea.Items[cbArea.SelectedIndex].Text, //显示文字
或者
cbArea.Items[cbArea.SelectedIndex].Value;//值
或者
cbArea.Items[cbArea.SelectedIndex].Value;//值
#5
我随便选择哪一项,都是返回同一个值"System.data.datarowview"
#6
没DataBind()
加个
加个
cbArea.DataBind()
#7
这两个方法我都试过了,能返回正确的值来,总是产生我的那个问题的原因是什么呢?而且我要做的事是先初始化这个comboBox,然后根据数据库中的某个值,再确定这个comboBox的SelectedIndex,即让comboBox不总是显示第一个选项。
#8
你的没有读到值啊
#9
我是在WinForm中设计的中,不需要databind(),如果在WebForm设计中,才需要DataBind()
#10
如果是空值的话,它还能show 出来吗?
如果检查没有什么错误的话,把那个Combox删了,重新拖一个
#11
cbArea.Items[cbArea.SelectedIndex] // 代表对象类型名
cbArea.Items[cbArea.SelectedIndex].Text // 代表对象的文本
cbArea.Items[cbArea.SelectedIndex].Value // 代表对象的值
cbArea.Items[cbArea.SelectedIndex].Text // 代表对象的文本
cbArea.Items[cbArea.SelectedIndex].Value // 代表对象的值
#12
我也觉得返回的值是这该对象的类型名,即System.data.datarowview,可是同样的代码即:
MessageBox.Show(cbArea.Items[cbArea.SelectedIndex].ToString()); //就是这一句,总是返回system.data.datarowview
//MessageBox.Show(cbSrvArea.Items[cbSrvArea.SelectedIndex].ToString()); //这一句是窗口上另一个下拉列表框,它就能返回正确值。
为什么第一句返回的是对象名,第二句就能返回正确的期望值呢?
#13
而且你的第二句:cbArea.Items[cbArea.SelectedIndex].Text // 代表对象的文本,是错误的吧,IDE自动提示中没有这个提示。只有ToString()
#14
换个角度讲,如果我们要浏览cbArea的第一项的文本值,下面的代码正确吗?
for (int i=0;i<=cbArea.Count-1;i++)
{
MessageBox(cbArea.Items[i].toString());
}
for (int i=0;i<=cbArea.Count-1;i++)
{
MessageBox(cbArea.Items[i].toString());
}
#15
不完全正确;
-------------------
如果你是
comboBox1.Items.Add("小五");
comboBox1.Items.Add("小五1");
comboBox1.Items.Add("小五2");
这样就正确了;
如果是 设置 DataSource 的返回就是"system.data.datarowview" 这样就不正确;
#16
这一段代码我将两个comboBox 都试过了,一个可以返回正确值,一个还是返回的是System.data.datarowview,区别是返回正确值的comboBox中ITEMS的值是手动输入的,返回错误值的是初始化代码初化过的那个comboBox
#17
正解
#18
使用这个"comboBox1.Text" 可以保证获取都是当前显示的文字;
#19
那如果我设置了DataSource,而且我就是想获得我想获得或设置该comboBox的值该怎能么办呢?
#20
设置了数据源后,cbArea.Items[i]实际是datarowview对象
DataRowView drv =(DataRowView)comboBox1.Items[i];
Console.WriteLine(drv["Name"]);
还原对象后要指定列名或索引来获取特定列的值。
DataRowView drv =(DataRowView)comboBox1.Items[i];
Console.WriteLine(drv["Name"]);
还原对象后要指定列名或索引来获取特定列的值。
#21
cbArea.SelectValue
cbArea.Text
cbArea.SelectText
.....
cbArea.Text
cbArea.SelectText
.....
#22
现在的问题变成了,如果comboBox中的内容是设置了DataSource、DisplayMember和valueMember后,该怎样获取和设置它的值的问题了????
#23
改变数据源,而不是改变comboBox的Item。
重新绑定
comboBox1.DataSource=null;
comboBox1.DataSource=aaa;
重新绑定
comboBox1.DataSource=null;
comboBox1.DataSource=aaa;
#24
获取
-------------
显示的文字用: comboBox1.Text;
获取值:comboBox1.SelectedValue.ToString()
设置:
修改绑定的对象如:(dataTable) 增加一列(dataRow),重新绑定;
#25
果然是高手,解释的很好,我又做了一下试验,非常成功。想想也正确的,既然comboBox跟dataTable绑定后,获的一行Items[i]当然是与绑定的DataTable中的一行,也就是DataRowView了。
#26
非常感谢wo6522317和zzx509两位高手,我马上结贴去,现在总算对下拉列表框有了一个新的认识。对绑定数据源的控件有了一个新的认识。