2011-10-31 85 views
4

我敢肯定這很簡單,但我花了大約1/2天的谷歌搜索和嘗試各種事情。c#datagridview從列表/字典/數據表datagridview combobox列datasouce

我有一個數據表,一列是另一個數據庫表的整數ID外鍵。

我有一個datagridview,我想使用組合框列允許用戶更改值。但不是使用整數,而是使用這些名稱會很好。

我試着創建一個簡單的結構與公共成員int ID和字符串名稱;一個字典,並查看枚舉(但在編譯時不知道的值),但沒有任何工作。

我能夠使用結構體值填充組合框,但無法以編程方式設置所選項目/索引;即,如果ID「5」是在數據表中,設置選擇項都具有的5

的ID的結構中的組合框所以要清楚即時想要:

gridview datasource's fk ID's 
1 
2 
3 

Foreign Key table: 

ID Name 
1 Name 1 
2 Name 2 
3 Name 3 

Datagridviewcombobox柱應該裝滿三件物品;應顯示爲「姓名1,姓名2,姓名3」。根據gridview數據源的FK id,每個選定的項目應該匹配。

幫助?

安德魯

回答

9

您可以設置DataGridViewComboBoxColumn.DataSource屬性,然後使用ValueMemberDisplayMember屬性來確定什麼是在ComboBox所示。最簡單的方法可能是將您的FK值加載到DataTable並將其用作數據源。對於你的例子:

// assuming your DataGridViewComboBox column is fkCol 
// and your fk values are in a DataTable called fkTable 
fkCol.DataSource = fkTable; 
fkCol.ValueMember = "ID"; 
fkCol.DisplayMember = "Name"; 

我不知道你是怎麼結合你的DataGridView您最初DataTable,但你可以在你原有的DataTable使用DataPropertyNameDataGridViewComboBox柱與特定的列關聯:

fkCol.DataPropertyName = "ColumnName"; 
+0

謝謝heas!每天搜索1/2,我需要的是另外2行代碼 - DOH!這是行得通的。 – andrew

0
DataAccessLayer dal = new DataAccessLayer(); 
    DataTable movies = dal.GetMovies(); 

    gvMovies.DataSource = movies; 
    gvMovies.AllowUserToAddRows = false; 
    gvMovies.AllowUserToDeleteRows = false; 

    //Create the new combobox column and set it's DataSource to a DataTable 
    DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn(); 
    col.DataSource = dal.GetMovieTypes(); ; 
    col.ValueMember = "MovieTypeID"; 
    col.DisplayMember = "MovieType"; 
    col.DataPropertyName = "MovieTypeID"; 

    //Add your new combobox column to the gridview 
    gvMovies.Columns.Add(col);