1

最初の列にaDataGridViewとaDataGridViewComboBoxColumnがバインドされています (値にアクセスするときに myclass を取得したいので、値メンバーを設定しません)。2列目もです。最初のselectedValueに基づいていくつかにバインドされます。List<MyClass>DisplayMember="name"DataGridViewComboBoxColumnList<String>DataGridViewComboBoxColumn

これはすべて正常に機能します。最初の を変更すると問題が発生しますDataGridViewComboBoxColumn.DataSource。新しい Myclass をデータソースに追加すると機能しますが、クラスを選択するとエラーが発生します。

System.ArgumentException: DataGridViewComboBoxCell 値が無効です

コード:

//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.
4

1 に答える 1

1

わかりました、私は私のために働く解決策を見つけました。代わりに、を使用してDataGridViewComboBoxColumn.DataSource、直接変更しDataGridViewComboBoxColumn.Itemsます。が設定されていると変更DataGridViewComboBoxColumn.Itemsできないため、問題がありますDataGridViewComboBoxColumn.DataSource。だから私はDataGridViewComboBoxColumn.DataSource = null編集する前に定義しますDataGridViewComboBoxColumn.Itens

コード:

//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;
于 2012-10-16T09:21:29.510 に答える