我有一个使用C#.NET在.NET Compact Framework上手持设备的应用程序。我面临的问题是ComboBox控件的表现非常不明显,有时它会显示内容,但有时它只是在ComboBox中显示System.DataRow类型的字符串。虽然它显示了这个System.DataRow字符串,但它仍然有它的值。我在combobox上有一个selectedIndexChanged事件,它返回正确的值,即使UI显示System.DataRow作为显示。
提前致谢。 欢呼声。
答案 0 :(得分:3)
在加载ComboBox的代码中,您可能会看到如下内容:
foreach (DataRow row in YourDataTable.Rows)
{
YourComboBox.Items.Add(row);
}
您基本上将每个DataRow加载到ComboBox中,而ComboBox使用的是DataRow的默认ToString()值,即“System.Data.DataRow”。你需要用一个DataRow的字段加载你的ComboxBox,如下所示:
foreach (DataRow row in YourDataTable.Rows)
{
YourComboBox.Items.Add(row["column1"].ToString());
}
更新:您的DisplayMember属性可能有拼写错误。这段代码:
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Rows.Add(1, "Bob");
dt.Rows.Add(2, "Doug");
dt.Rows.Add(3, "Beth");
comboBox1.ValueMember = "ID";
comboBox1.DisplayMember = "Name";
comboBox1.DataSource = dt;
按预期正常工作,但DisplayMember区分大小写,因此如果我将倒数第二行更改为:
comboBox1.DisplayMember = "name";
ComboBox中的所有项目都说“System.Data.DataRowView”。我想你只需要查看你的列名。
答案 1 :(得分:1)
感谢您的帮助。我解决了这个问题。因此,方案是使用数据库中的值填充组合框。数据库查询返回三列ID,名称,大小。但我只需要2列名称和ID为combobox。我从数据库中获取值,然后在填充到组合框之前在客户端添加一个新行到该数据表中。在这个客户端行中,我只添加了2列Name和ID,但没有添加大小。这件事充满了一切。它很奇怪,但它现在工作正常。我想我会做更多测试,看看是否再次出现错误。
感谢您的帮助。