2010-09-21 68 views
4

大家好!我想這是我在StackOverFlow.com上的第一篇文章:-)C#DataGridViewComboBoxColumn綁定問題

我一直有這個問題一段時間。 爲了讓這一切簡單,假設我們有一個名爲「書」「類別」下面的模式2個的數據庫表:

書(ID,標題,CATID)
類別(ID, catName)

顯然「CATID」「本本」表的外鍵,並指定一本書屬於一個類別字段。

我已經創建了必要的LinQ to Sql類並創建了必要的bindingSource對象。 我想要做的是在DataGridView對象中顯示所有書籍。我希望它有一個名爲的「類別」列,其類型爲DataGridViewComboBoxColumn包含所有現有類別,並且每本書都顯示特定圖書所屬的類別。用戶可以通過在組合框中選擇另一個類別來重新分配書籍的類別。

我已經設法做到了我想要的組合框,它的工作原理與我想要的一樣。 但是,當涉及到DataGridView我只是無法弄清楚。

任何幫助將不勝感激 我花了幾天時間來想辦法的,但至今沒有運氣:-(

回答

8

這應該工作:

// create the column (probably better done by the designer) 
DataGridViewComboBoxColumn categoryColumn = ... 


// bind it 
categoryColumn.DataSource = db.Categories.ToList(); 
categoryColumn.DisplayMember = "catName"; // display category.catName 
categoryColumn.ValueMember = "id";   // use category.id as the identifier 
categoryColumn.DataPropertyName = "catId"; // bind the column to book.catId 
+0

WOW我簡直不敢相信!它的工作方式就是我想要的,非常感謝你! 事情是我花了無數小時玩這些屬性,我也設置了它們,但都沒有成功 猜猜我遇到的問題是「DataSource」我設置了。 我用LinQ來選擇它們,它不起作用。猜猜「ToList()」方法這些都是魔法! :-) 小心解釋我們到底在做什麼? 我總是會將「DisplayMember」與「DataPropertyName」混淆。 :-p 再次非常感謝您的精確答案:-) – M2X 2010-09-21 10:02:17

+0

DataPropertyName是所有DGV列的通用屬性。它是由該列表示的數據對象成員的名稱。 DisplayMember/ValueMember特定於DataGridViewComboBoxColumn。這些表示分別代表用於在UI中顯示對象的成員以及用作組合框的「選定值」的成員(請注意,這些屬性對於ComboBox或ListBox等其他控件也存在) – 2010-09-21 10:20:38

+0

感謝您說明! 「DataPropertyName」設置爲「catId」,它是「book」的屬性。 「categoryColumn」的「DataSource」分配給「Categories」。 這是如何工作的? AFAIK我們告訴編譯器,「categoryColumn」綁定到「Books」的「catId」。但「categoryColumn」和「Books」之間的鏈接在哪裏? – M2X 2010-09-21 11:03:00