是否有人向我解释如何将DataGridViewComboBoxCell添加到dataGridView?代码是这样的:
foreach(....){
DataGridViewComboBoxCell cmb = new DataGridViewComboBoxCell();
//cmb.item.add(....
dataGridView.Rows.Add(new object[] {cmb,name,surname}); }
网格中的第一个单元格是DataGridViewComboBoxColumn类型,我尝试将cmb更改为DataGridViewComboBoxColumn,但仍然没有。
我处理DataError,所以我没有得到"值是无效的"错误,但我的组合框在datagridview是空的
好的,我解决了这个问题。似乎您必须一步一步地为单元格添加值。
我将给出一般的解释,因为似乎很多人对此有问题。假设你有3列的DataGridView, DataGridViewTextBoxCell, DataGridViewComboBoxColumn, DataGridViewCheckBoxCell按这个顺序。现在,你必须让这三个列使用设计器,否则它将无法工作。
现在你想给网格添加特定的值,每一行代表一个人。在设计器中,它看起来像
Name PhoneNumberS Married
..*.. |.....|..............|.........|....
所以你想把他的名字添加到textboxcell,把电话号码列表添加到comboboxcell,如果他结婚了就检查checkboxcell。在你的名单上对每个人重复一遍。
下面是伪代码: foreach(Person p in people.getAll()){
/////MAKE NEW CELL FOR EACH VALUE
DataGridViewTextBoxCell name= new DataGridViewTextBoxCell();
name.Value = p.name;
DataGridViewTextBoxCell phones= new DataGridViewTextBoxCell();
foreach(Int Pnumber in p.numbers){
phones.items.add(Pnumber);
}
DataGridViewCheckBoxCell ismarried = new DataGridViewCheckBoxCell();
ismarried.Value = p.married;
///////// MAKE NEW ROW AND ADD CELLS
DataGridViewRow row = new DataGridViewRow();
row .Cells.Add(name);
row .Cells.Add(phones);
row .Cells.Add(ismarried );
///// ADD ENTIRE ROW TO DATA GRID
dataGridView.Rows.Add(row);
}
只是重复一下,你首先必须使用设计器添加列到网格中,当你在代码中添加单元格到行时,它必须以与在设计器中看到的完全相同的顺序
解决这个问题有不同的方法。我发布这个答案是因为我正在处理类似的情况,并找到了一个体面的解决方案。DataGridView必须放置在公式上,其余的(在本例中)是在代码中完成的。首先我们从DataGridView的数据源开始。
DataTable myData = new DataTable();
myDataGridView.AutoGenerateColumns = false;
关闭自动生成是很重要的,这样我们就可以根据需要设置列。现在向DataTable中添加一些数据。在这个例子中,cats:
myData.Columns.Add("Name", typeof(string));
myData.Columns.Add("Gender", typeof(string));
myData.Rows.Add(new object[] {"Ser Pounce", "male"});
myData.Rows.Add(new object[] {"Fluffy", "male"});
myData.Rows.Add(new object[] {"Peach", "female"});
在我们指定了数据和它的列之后,我们可以在我们的DataGridView中创建特定的列。
DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColumn();
nameColumn.HeaderText = "Cat name";
nameColumn.DataPropertyName = "Name";
nameColumn.ReadOnly = true;
DataGridViewComboBoxColumn genderColumn = new DataGridViewComboBoxColumn ();
List<string> genderList = new List<string>() { "male", "female", "unknown" };
genderColumn.DataSource = genderList;
genderColumn.HeaderText = "Gender";
genderColumn.DataPropertyName = "Gender";
genderColumn.ValueType = typeof(string);
myDataGridView.DataSource = myData;
myDataGridView.Columns.AddRange(nameColumn, genderColumn);
在添加定义的列之前,为DataGridView添加我们的Data作为数据源。注意,每个列(DataGridView)的DataPropertyName必须与我们在DataTable中赋予列的名称相同。HeaderText可以以不同的方式命名。最后,匹配列和数据的ValueType。
我认为你想添加一个类型为DataGridViewComboBoxColumn的列。
DataGridViewComboBoxColumn d = new DataGridViewComboBoxColumn();
d.Name = "Drinks";
d.Items.Add("Coca-Cola");
d.Items.Add("Sprite");
dataGridView1.Columns.Add(d);
我遇到过类似的问题,
DataGridViewComboBoxCell
值无效。
组合框在第一次运行时工作良好,当我更改其中一个组合框(在网格之外)中的值时,更改它,应该根据参数将新数据集绑定到数据网格。但在第二次运行时抛出错误。
这是我的工作:
foreach (var p in realmPos)
{
clmRealmPosition.Items.Add(p.RealmPosition);
}
我将上面的代码替换为:
clmRealmPosition.DataSource = realmPos.Select(s => s.RealmPosition).ToList();
注意: clmRealmPosition
是组合框列的设计名称。另外,有一个ErrorEvent
也很好