2012-10-04 47 views
1

我在第一列DataGridViewComboBoxColumn被綁定蒙山一個List<MyClass>DisplayMember="name"(我不設置valeumember,因爲我想獲得MyClass的時候我accesse到值)DataGridView。第二欄也是DataGridViewComboBoxColumn。它將根據第一個DataGridViewComboBoxColumn selectedValue綁定到一些List<String>DataGridViewComboBoxColumn.DataSource變化問題1

所有這些工作都很好,當我更改第一個DataGridViewComboBoxColumn.DataSource時,問題就開始了。當我添加一個新的MYCLASS到它的工作原理的數據源,但如果我選擇類,我會得到一個錯誤:

System.ArgumentException: DataGridViewComboBoxCell value is not valid

代碼:

//Set columns to Datagridview 
DataGridViewImageColumn btnEdit = new DataGridViewImageColumn(); 
Image gear = (System.Drawing.Image)Properties.Resources.gear; 
btnEdit.Image = gear; 
datagridview.Columns.Add(btnEdit); 

//Table 
DataGridViewComboBoxColumn cbTable = new DataGridViewComboBoxColumn(); 
cbTable.HeaderText = "Table"; 
cbTable.Name = "Table"; 
cbTable.DisplayMember = "NameToShow"; 
//tableDataSource = cbTable.DataSource; 
//cbTable.DataSource = moduleClone.SqlQuery.Tables; 
datagridview.Columns.Add(cbTable); 

//... 
//... 
//... 

//Load data 
((DataGridViewComboBoxColumn)datagridview.Columns[1]).DataSource = (List<Table>)moduleClone.SqlQuery.Tables; 
//Work just fine 

//... 
//... 
//... 

//Now if i reload de data 
datagridview.Rows.Clear(); 
((DataGridViewComboBoxColumn)datagridview.Columns[1]).DataSource = (List<Table>)moduleClone.SqlQuery.Tables; 
//This give me one message box with the exception several times when drawing the gridview. 
+0

'但如果我選擇類我會得到你這個是什麼意思的error'?你可以嘗試說清楚嗎? – Sami

+0

你可以放你的代碼嗎? – HaemEternal

+0

Hi @Sami,當我選擇combox中的項目。這不是清除..:S HaemEternal我是新的在這個論壇和每個論壇說實話,我嘗試把一些代碼,但我不能得到它配置**:(**我試圖做像幫助例子,但不起作用,並且字符的數量太低以至於...有一些正確的方式ti做它,我失蹤了?! – Lecsox

回答

1

好吧,我發現對我的作品的解決方案。 改爲使用DataGridViewComboBoxColumn.DataSource,我直接更改DataGridViewComboBoxColumn.Items。有問題,因爲如果設置了DataGridViewComboBoxColumn.DataSource,您不能更改DataGridViewComboBoxColumn.Items。所以我在編輯DataGridViewComboBoxColumn.Itens之前定義了DataGridViewComboBoxColumn.DataSource = null

代碼:

//Set columns to Datagridview 
DataGridViewImageColumn btnEdit = new DataGridViewImageColumn(); 
Image gear = (System.Drawing.Image)Properties.Resources.gear; 
btnEdit.Image = gear; 
datagridview.Columns.Add(btnEdit); 

//Table 
DataGridViewComboBoxColumn cbTable = new DataGridViewComboBoxColumn(); 
cbTable.HeaderText = "Table"; 
cbTable.Name = "Table"; 
cbTable.DisplayMember = "NameToShow"; 
datagridview.Columns.Add(cbTable); 

//... 
//... 
//... 

//Load data 
((DataGridViewComboBoxColumn)datagridview.Columns[1]).Itens = (List<Table>)moduleClone.SqlQuery.Tables; 
//Work just fine 

//... 
//... 
//... 

//Now I reload de data 
datagridview.Rows.Clear(); 
((DataGridViewComboBoxColumn)datagridview.Columns[1]).DataSource = null; 
((DataGridViewComboBoxColumn)datagridview.Columns[1]).Items.clear(); 
((DataGridViewComboBoxColumn)datagridview.Columns[1]).Items= (List<Table>)moduleClone.SqlQuery.Tables;