2009-09-20 110 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