C# DataGridViewComboxColumn.DataSource更改问题1

C# DataGridViewComboxColumn.DataSource更改问题1,c#,winforms,C#,Winforms,我有一个DataGridView,在第一列中有一个datagridviewcomboxcolumn,它与List绑定,还有一个DisplayMember=“name”(我不设置valeumember,因为我想在访问value时获取我的class)。第二列也是一个DataGridViewComboBoxColumn。它将根据第一个DataGridViewComboBoxColumnselectedValue绑定到一些列表 所有这些工作都很好,当我更改第一个datagridviewcomboxcol

我有一个
DataGridView
,在第一列中有一个
datagridviewcomboxcolumn
,它与
List
绑定,还有一个
DisplayMember=“name”
(我不设置valeumember,因为我想在访问value时获取我的class)。第二列也是一个
DataGridViewComboBoxColumn
。它将根据第一个
DataGridViewComboBoxColumn
selectedValue绑定到一些
列表

所有这些工作都很好,当我更改第一个
datagridviewcomboxcolumn.DataSource
时,问题就开始了。当我向数据源添加一个新的Myclass时,它可以工作,但是如果我选择了该类,我将得到一个错误:

System.ArgumentException:DataGridViewComboBoxCell值无效

代码:

//将列设置为Datagridview
DataGridViewImageColumn btnEdit=新DataGridViewImageColumn();
Image gear=(System.Drawing.Image)Properties.Resources.gear;
btnEdit.Image=档位;
datagridview.Columns.Add(btnEdit);
//桌子
DataGridViewComboBoxColumn cbTable=新DataGridViewComboxColumn();
cbTable.HeaderText=“表格”;
cbTable.Name=“Table”;
cbTable.DisplayMember=“namethow”;
//tableDataSource=cbTable.DataSource;
//cbTable.DataSource=moduleClone.SqlQuery.Tables;
datagridview.Columns.Add(cbTable);
//...  
//...  
//...  
//加载数据
((DataGridViewComboxColumn)datagridview.Columns[1]).DataSource=(List)moduleClone.SqlQuery.Tables;
//干得很好
//...  
//...  
//...  
//现在如果我重新加载de数据
datagridview.Rows.Clear();
((DataGridViewComboxColumn)datagridview.Columns[1]).DataSource=(List)moduleClone.SqlQuery.Tables;
//这给了我一个消息框,但在绘制gridview时有几次例外。

好的,我找到了一个适合我的解决方案。 使用
DataGridViewComboxColumn.DataSource
,我直接更改
DataGridViewComboxColumn.Items
。出现问题,因为如果设置了
datagridviewcomboxcolumn.DataSource
,则无法更改
datagridviewcomboxcolumn.Items
。因此,我在编辑
datagridviewcomboxcolumn.Itens
之前定义了
datagridviewcomboxcolumn.DataSource=null

代码:

//将列设置为Datagridview
DataGridViewImageColumn btnEdit=新DataGridViewImageColumn();
Image gear=(System.Drawing.Image)Properties.Resources.gear;
btnEdit.Image=档位;
datagridview.Columns.Add(btnEdit);
//桌子
DataGridViewComboBoxColumn cbTable=新DataGridViewComboxColumn();
cbTable.HeaderText=“表格”;
cbTable.Name=“Table”;
cbTable.DisplayMember=“namethow”;
datagridview.Columns.Add(cbTable);
//...  
//...  
//...  
//加载数据
((DataGridViewComboxColumn)datagridview.Columns[1]).Itens=(List)moduleClone.SqlQuery.Tables;
//干得很好
//...  
//...  
//...  
//现在我重新加载de数据
datagridview.Rows.Clear();
((DataGridViewComboxColumn)datagridview.Columns[1]).DataSource=null;
((DataGridViewComboxColumn)datagridview.Columns[1]).Items.clear();
((DataGridViewComboxColumn)datagridview.Columns[1]).Items=(List)moduleClone.SqlQuery.Tables;

好的,我找到了一个适合我的解决方案。 使用
DataGridViewComboxColumn.DataSource
,我直接更改
DataGridViewComboxColumn.Items
。出现问题,因为如果设置了
datagridviewcomboxcolumn.DataSource
,则无法更改
datagridviewcomboxcolumn.Items
。因此,我在编辑
datagridviewcomboxcolumn.Itens
之前定义了
datagridviewcomboxcolumn.DataSource=null

代码:

//将列设置为Datagridview
DataGridViewImageColumn btnEdit=新DataGridViewImageColumn();
Image gear=(System.Drawing.Image)Properties.Resources.gear;
btnEdit.Image=档位;
datagridview.Columns.Add(btnEdit);
//桌子
DataGridViewComboBoxColumn cbTable=新DataGridViewComboxColumn();
cbTable.HeaderText=“表格”;
cbTable.Name=“Table”;
cbTable.DisplayMember=“namethow”;
datagridview.Columns.Add(cbTable);
//...  
//...  
//...  
//加载数据
((DataGridViewComboxColumn)datagridview.Columns[1]).Itens=(List)moduleClone.SqlQuery.Tables;
//干得很好
//...  
//...  
//...  
//现在我重新加载de数据
datagridview.Rows.Clear();
((DataGridViewComboxColumn)datagridview.Columns[1]).DataSource=null;
((DataGridViewComboxColumn)datagridview.Columns[1]).Items.clear();
((DataGridViewComboxColumn)datagridview.Columns[1]).Items=(List)moduleClone.SqlQuery.Tables;

但是如果我选择了类,我会得到一个错误
你这是什么意思?你能说清楚吗?嗨@Sami,当我在组合框中选择项目时。这并不是为了澄清S HaemEternal我是这个论坛的新手,老实说,在每个论坛中,我都会尝试输入一些代码,但我无法配置它:(我试着去做以喜欢这个帮助示例,但是不起作用,而且字符数太少了..有一些正确的方法我没有做?!
但是如果我选择这个类,我会得到一个错误
你的意思是什么?你能试着弄清楚吗?嗨@Sami,当我在组合框中选择项目时。这不是要清除的..:S HaemEternal我是这个论坛的新成员,老实说,在每个论坛上,我都试着输入一些代码,但我无法配置:(我试着去做,以喜欢帮助示例,但不起作用,字符数太少,以至于..有一些正确的方法我做不到?!
//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.
//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;