DataGridViewComboBoxCell value is not valid



是否有人向我解释如何将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也很好

相关内容

  • 没有找到相关文章

最新更新