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;