我有一個應用程序,使用C#.NET與.NET緊湊框架進行手持設備工作。我面臨的問題是ComboBox控件表現得非常不科學,有時會顯示內容,但有時它只是在ComboBox中顯示System.DataRow類型的字符串。雖然它顯示了這個System.DataRow字符串,但它仍然有它的值。我在combobox上有一個selectedIndexChanged事件,即使UI顯示System.DataRow作爲顯示,它也會返回正確的值。C#.NET組合框控件
在此先感謝。 乾杯。
我有一個應用程序,使用C#.NET與.NET緊湊框架進行手持設備工作。我面臨的問題是ComboBox控件表現得非常不科學,有時會顯示內容,但有時它只是在ComboBox中顯示System.DataRow類型的字符串。雖然它顯示了這個System.DataRow字符串,但它仍然有它的值。我在combobox上有一個selectedIndexChanged事件,即使UI顯示System.DataRow作爲顯示,它也會返回正確的值。C#.NET組合框控件
在此先感謝。 乾杯。
感謝您的幫助。我解決了這個問題。所以這個場景是用數據庫的值填充組合框。數據庫查詢返回了三列ID,名稱,大小。但是我只需要2列的ComboBox的Name和ID。我從數據庫獲取值,然後在將客戶端添加到該數據表中之前,將其填充到組合框中。在這個客戶端行中,我只添加了2列名稱和ID,但沒有添加大小。這東西是塞滿了一切。它的奇怪,但它現在工作正常。我想我會做更多的測試,看看這個錯誤是否再次出現。
感謝您的幫助。
在加載您的組合框的代碼,你可能有一些看起來像這樣:
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」。我想你只需要檢查你的列名。
嗨MusicGenesis, 感謝您的快速回復,但我沒有把項目使用循環到組合框,但我分配DataSource它。 this.combobox.DisplayMember =「名稱」; this.combobox.ValueMember =「ID」; this.combobox.DataSource = DataTableName; – Zinx 2009-09-21 00:33:17
在某些情況下,您的數據表可能不包含標題爲'name'的列嗎?正如MusiGenisis指出的,如果有問題的顯示成員不存在,ToString()方法將被調用。在每種情況下,數據表是否填充了相同的查詢?發佈更多的代碼可能有助於解決您的問題。 – Phaedrus 2009-09-21 00:45:37