今天我快被气晕了,我的窗口上放置了两个combobox控件,其中一个控件总是返回“System.Data.DataRowView”值,这快把我气晕了。我的代码是这样的。
//初始化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()); //这一句是窗口上另一个下拉列表框,它就能返回正确值。
} 我现在是彻底服气了,为啥总是返回这个值呢??? 敬请高手能够解答。在线等待中.......................
//初始化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()); //这一句是窗口上另一个下拉列表框,它就能返回正确值。
} 我现在是彻底服气了,为啥总是返回这个值呢??? 敬请高手能够解答。在线等待中.......................
解决方案 »
- winform导出数据时怎么加进度条?或者弹出一个子窗口“正在导出...”+多少+"条记录"!如何实现?
- rdlc高手帮忙:FormatNumber的用法
- [新手问题]关于SelectCommand.CommandType的问题
- 修改字符传:每隔2位就改为**该怎么样写?
- matlab中有没有将角度转换为弧度,或将弧度转换为角度的函数?
- C#中怎样浏览大图片,而且可以从PictrueBox 中截取 部分想要的图片,请问这怎么实现????
- sql转access的问题
- 在WEB页面里的按钮点击,如何显示对话框
- 小弟请教一个简单的问题
- 问个有关GetHostByAddr的
- DataList中嵌入 CheckBoxList 问题
- 求动态添加搜索条件的思路
或者
cbArea.Items[cbArea.SelectedIndex].Value;//值
我随便选择哪一项,都是返回同一个值"System.data.datarowview"
加个 cbArea.DataBind()
这两个方法我都试过了,能返回正确的值来,总是产生我的那个问题的原因是什么呢?而且我要做的事是先初始化这个comboBox,然后根据数据库中的某个值,再确定这个comboBox的SelectedIndex,即让comboBox不总是显示第一个选项。
我是在WinForm中设计的中,不需要databind(),如果在WebForm设计中,才需要DataBind()
如果是空值的话,它还能show 出来吗?如果检查没有什么错误的话,把那个Combox删了,重新拖一个
cbArea.Items[cbArea.SelectedIndex].Text // 代表对象的文本
cbArea.Items[cbArea.SelectedIndex].Value // 代表对象的值
我也觉得返回的值是这该对象的类型名,即System.data.datarowview,可是同样的代码即:
MessageBox.Show(cbArea.Items[cbArea.SelectedIndex].ToString()); //就是这一句,总是返回system.data.datarowview
//MessageBox.Show(cbSrvArea.Items[cbSrvArea.SelectedIndex].ToString()); //这一句是窗口上另一个下拉列表框,它就能返回正确值。
为什么第一句返回的是对象名,第二句就能返回正确的期望值呢?
而且你的第二句:cbArea.Items[cbArea.SelectedIndex].Text // 代表对象的文本,是错误的吧,IDE自动提示中没有这个提示。只有ToString()
for (int i=0;i<=cbArea.Count-1;i++)
{
MessageBox(cbArea.Items[i].toString());
}
不完全正确;
-------------------
如果你是
comboBox1.Items.Add("小五");
comboBox1.Items.Add("小五1");
comboBox1.Items.Add("小五2");
这样就正确了;如果是 设置 DataSource 的返回就是"system.data.datarowview" 这样就不正确;
这一段代码我将两个comboBox 都试过了,一个可以返回正确值,一个还是返回的是System.data.datarowview,区别是返回正确值的comboBox中ITEMS的值是手动输入的,返回错误值的是初始化代码初化过的那个comboBox
DataRowView drv =(DataRowView)comboBox1.Items[i];
Console.WriteLine(drv["Name"]);
还原对象后要指定列名或索引来获取特定列的值。
cbArea.Text
cbArea.SelectText.....
重新绑定
comboBox1.DataSource=null;
comboBox1.DataSource=aaa;
-------------
显示的文字用: comboBox1.Text;
获取值:comboBox1.SelectedValue.ToString()
设置:
修改绑定的对象如:(dataTable) 增加一列(dataRow),重新绑定;
果然是高手,解释的很好,我又做了一下试验,非常成功。想想也正确的,既然comboBox跟dataTable绑定后,获的一行Items[i]当然是与绑定的DataTable中的一行,也就是DataRowView了。