2009-09-20 74 views
2

我有一个应用程序,使用C#.NET与.NET紧凑框架进行手持设备工作。我面临的问题是ComboBox控件表现得非常不科学,有时会显示内容,但有时它只是在ComboBox中显示System.DataRow类型的字符串。虽然它显示了这个System.DataRow字符串,但它仍然有它的值。我在combobox上有一个selectedIndexChanged事件,即使UI显示System.DataRow作为显示,它也会返回正确的值。C#.NET组合框控件

在此先感谢。 干杯。

+2

在某些情况下,您的数据表可能不包含标题为'name'的列吗?正如MusiGenisis指出的,如果有问题的显示成员不存在,ToString()方法将被调用。在每种情况下,数据表是否填充了相同的查询?发布更多的代码可能有助于解决您的问题。 – Phaedrus 2009-09-21 00:45:37

回答

1

感谢您的帮助。我解决了这个问题。所以这个场景是用数据库的值填充组合框。数据库查询返回了三列ID,名称,大小。但是我只需要2列的ComboBox的Name和ID。我从数据库获取值,然后在将客户端添加到该数据表中之前,将其填充到组合框中。在这个客户端行中,我只添加了2列名称和ID,但没有添加大小。这东西是塞满了一切。它的奇怪,但它现在工作正常。我想我会做更多的测试,看看这个错误是否再次出现。

感谢您的帮助。

3

在加载您的组合框的代码,你可能有一些看起来像这样:

foreach (DataRow row in YourDataTable.Rows) 
{ 
    YourComboBox.Items.Add(row); 
} 

你每个完整的DataRow基本上加载到您的组合框,而组合框使用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是大小写敏感的,所以如果我改变了第二至最后一行:在ComboBox

comboBox1.DisplayMember = "name"; 

所有项目说“System.Data.DataRowView”。我想你只需要检查你的列名。

+0

嗨MusicGenesis, 感谢您的快速回复,但我没有把项目使用循环到组合框,但我分配DataSource它。 this.combobox.DisplayMember =“名称”; this.combobox.ValueMember =“ID”; this.combobox.DataSource = DataTableName; – Zinx 2009-09-21 00:33:17