C# DataGridViewComboxCell值无效

C# DataGridViewComboxCell值无效,c#,datagridview,datagridviewcombobox,datagridviewcomboboxcell,C#,Datagridview,Datagridviewcombobox,Datagridviewcomboboxcell,有人能给我解释一下如何将DataGridViewComboxCell添加到dataGridView吗? 代码是这样的: foreach(....){ DataGridViewComboBoxCell cmb = new DataGridViewComboBoxCell(); //cmb.item.add(.... dataGridView.Rows.Add(new object[] {cmb,name,surname}); } 网格中的第一个单元格是DataGridViewCom

有人能给我解释一下如何将DataGridViewComboxCell添加到dataGridView吗? 代码是这样的:

 foreach(....){

 DataGridViewComboBoxCell cmb = new DataGridViewComboBoxCell();
//cmb.item.add(....

dataGridView.Rows.Add(new object[] {cmb,name,surname});   } 
网格中的第一个单元格是DataGridViewComboBoxColumn类型,我尝试将cmb更改为DataGridViewComboxColumn,但仍然一无所获


我输入了DataError,因此没有得到“值无效”错误,但datagridview中的组合框为空。

我想您需要添加DataGridViewComboxColumn类型的列

DataGridViewComboBoxColumn d = new DataGridViewComboBoxColumn();
        d.Name = "Drinks";
        d.Items.Add("Coca-Cola");
        d.Items.Add("Sprite");

        dataGridView1.Columns.Add(d);

我希望这会有帮助。

好的,我解决了这个问题。似乎您必须一步一步地向单元格添加值

我将给出一般性的解释,因为似乎有很多人对此有问题。假设DataGridView有3列,依次为DataGridViewTextBoxCell、DataGridViewComboxColumn、DataGridViewCheckBoxCell。现在,您必须使用Desinger制作这三个列,否则它将无法工作

所以现在您需要向网格中添加特定的值,每一行表示一个人。 在designer中,它看起来像

          Name  PhoneNumberS   Married
  ..*.. |.....|..............|.........|.... 
所以你想把他的名字添加到textboxcell,把电话号码列表添加到ComboxCell,如果他结婚了,检查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);
   }

重复一次,您首先必须使用DESIGNER将列添加到网格中,并且在代码中将单元格添加到行中时,其顺序必须与DESIGNER中的顺序完全相同。

对于如何解决此问题,有不同的方法。我发布这个答案是因为我正在处理类似的情况,并找到了一个像样的解决方案。DataGridView必须放在您的公式上,其余的(在本例中)都是在代码中完成的。 首先,我们从DataGridView的数据源开始

    DataTable myData = new DataTable();
    myDataGridView.AutoGenerateColumns = false;
关闭自动生成功能很重要,这样我们就可以根据需要设置列。现在将一些数据添加到我们的DataTable中。在本例中,猫:

    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);
DataGridViewTextBoxColumn nameColumn=newDataGridViewTextBoxColumn();
nameColumn.HeaderText=“猫名”;
nameColumn.DataPropertyName=“Name”;
nameColumn.ReadOnly=true;
DataGridViewComboxColumn genderColumn=新DataGridViewComboxColumn();
列表性别列表=新列表(){“男性”、“女性”、“未知”};
genderColumn.DataSource=性别列表;
genderColumn.HeaderText=“性别”;
genderColumn.DataPropertyName=“性别”;
genderColumn.ValueType=typeof(字符串);
myDataGridView.DataSource=myData;
myDataGridView.Columns.AddRange(nameColumn,genderColumn);

在添加定义的列之前,将数据添加为DataGridView的数据源。请注意,每个列(DataGridView)的DataPropertyName必须与我们在DataTable中为列指定的名称相同。HeaderText可以用不同的名称命名。最后,匹配列和数据的ValueType

是的,我试过使用DataGridViewComboBoxColumn,但仍然一无所获。不,网格中的combobox仍然是空的。我正在尝试使用DataGridViewComboxColumn cmb=((DataGridViewComboxColumn)l.dataGridView1.Columns[“Column1]”);但是它将所有组合框项目设置为相同的项目阅读本文。这是telerik组件,但几乎相同。希望这会有帮助。