2013-05-30 79 views
3

那麼,在將ListBox控件綁定到DataTable時,我遇到了一個問題。C#Winforms將ListBox控件綁定到DataTable問題

代碼:

using (DbWrapper db = DbFactory.GetConnection("SQLite").WrapIn<MyDbWrapper>()) 
{ 
    db.Open(); 

    DataTable results = db.ExecuteQuery("SELECT id,title FROM schedule"); 

    ScheduleList.DataSource = results; 
    ScheduleList.DisplayMember = "title"; 
    ScheduleList.ValueMember = "id"; 
} 

此代碼應該從我SQLite數據庫接收數據,並將其綁定到我的ScheduleList,但是當我編譯我看到我的列表框充滿System.Data.DataRowView字符串。

enter image description here

有與數據庫沒有問題。應用程序正在接收數據,並且數據是正確的。如果我迭代我的數據表,我會得到id和title作爲列名,所以他們沒有錯。

我讀過,可以通過更改綁定順序或將ListBox.Sorted屬性設置爲false來解決問題。我已經嘗試了一切,仍然沒有成功。

有什麼建議嗎? 是否有任何其他解決方案,除了迭代數據行並手動添加它們?

最好的問候。

+0

可能的重複:http://stackoverflow.com/questions/8803859/how-to-bind-a-listbox-to-a-datatable-from-a-session-object – DonBoitnott

+0

嗯,它是,但解決方案張貼在那裏並沒有解決我的問題。 – fakemeta

回答

0

我的壞。 ListBox對DisplayMember和ValueMember的更改沒有響應,因爲自定義ListBox DrawItem事件中的代碼不正確。

+0

我懷疑這樣的事情,因爲我的測試,實際上我找到的每個搜索結果,都表明你的代碼應該運行良好。 – DonBoitnott

0

重新排列聲明:

ScheduleList.DisplayMember = "title"; 
ScheduleList.ValueMember = "id"; 
ScheduleList.DataSource = results; 
+1

我已經試過了。沒有改變。 – fakemeta

4

我用這個代碼,它的工作。

DataTable oTable = new DataTable(); 
oTable.Columns.Add("ID", typeof(int)); 
oTable.Columns.Add("TITLE", typeof(string)); 

DataRow oNewRow = null; 
for (int i = 0; i < 10; i++) 
{ 
    oNewRow = oTable.NewRow(); 

    oNewRow["ID"] = i; 
    oNewRow["TITLE"] = "Title_" + i.ToString(); 

    oTable.Rows.Add(oNewRow); 
} 

listBox1.DataSource = oTable; 
listBox1.ValueMember = "ID"; 
listBox1.DisplayMember = "TITLE"; 

enter image description here

編輯: 你可能需要先給THA數據源,然後聲明價值顯示的成員。

+0

謝謝你的努力,但我已經解決了這個問題。這是由自定義DrawItem事件引起的。 – fakemeta

相關問題