我在运行时将项添加到ComboBox。一切正常但问题是ValueMember只显示所有项目中最后一条记录的值。我想要ValueMember中的当前项目。
string qr1 = "select * from categorymaster";
SqlCommand cmd1 = new SqlCommand(qr1, con);
con.Open();
SqlDataReader dr1 = cmd1.ExecuteReader();
cmbcat.Items.Clear();
while (dr1.Read())
{
cmbcat.Items.Add(dr1[1].ToString());
cmbcat.DisplayMember = dr1[1].ToString();
cmbcat.ValueMember = dr1[0].ToString();
}
con.Close();
任何人都可以帮助我吗?
答案 0 :(得分:3)
DisplayMember
和ValueMember
引用对象中属性的名称,而不是代码中的值。由于您不使用任何对象填充项目,而只使用值,因此根本不需要设置它们。
但总的来说你的方法需要工作!最好创建一个对象,将两个属性中的读取器值保留在两个属性中,并将其定义为ValueMember
,将另一个定义为DisplayMember
。
答案 1 :(得分:1)
循环时不需要使用值成员
string qr1 = "select * from categorymaster";
SqlCommand cmd1 = new SqlCommand(qr1, con);
con.Open();
SqlDataReader dr1 = cmd1.ExecuteReader();
cmbcat.Items.Clear();
while (dr1.Read())
{
cmbcat.Items.Add(new Item(dr1[1].ToString(), dr1[0].ToString()));
}
con.Close();
答案 2 :(得分:1)
每次在while循环中浏览阅读器中的项目时,都会向ComboBox添加项目。到目前为止一切顺利,但是你将ComboBox的Display - 和ValueMember设置为从阅读器读取的最后一项。所以最后ComboBox的Display - 和ValueMember等于读取的最后一项。
修改强>
要获得正确的解决方案,请查看@ionden @PraVn已经给出的答案:使用DataTable / Source或只是在循环中添加项目。