DataGridViewComboBoxCell值无效

时间:2014-05-31 23:17:20

标签: c# datagridview datagridviewcombobox datagridviewcomboboxcell

有人可以向我解释如何将DataGridViewComboBoxCell添加到dataGridView吗? 代码是这样的:

 foreach(....){

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

dataGridView.Rows.Add(new object[] {cmb,name,surname});   } 

网格中的第一个单元格是DataGridViewComboBoxColumn的类型,我尝试将cmb更改为DataGridViewComboBoxColumn,但仍然没有。

我handeld DataError所以我没有得到"值无效"错误,但我在datagridview中的组合框是空的。

3 个答案:

答案 0 :(得分:1)

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

我会给出一般解释,因为看起来很多人都有这个问题。让我们假设您按顺序拥有3列DataGridView,DataGridViewTextBoxCell,DataGridViewComboBoxColumn,DataGridViewCheckBoxCell。现在,你必须使用Desinger制作这三列,否则就无法工作。

所以现在你想要为网格添加特定的值,每一行代表一个人。 在设计师看起来像

          Name  PhoneNumberS   Married
  ..*.. |.....|..............|.........|.... 

所以你想把他的名字添加到textboxcell,对于组合单元的phonenumbers列表,如果他已经结婚则要检查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添加列到网格中,当你在代码中添加单元格时,它必须与设计师看到的相同。

答案 1 :(得分:0)

我认为您要添加一个DataGridViewComboBoxColumn类型的列。

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

        dataGridView1.Columns.Add(d);

我希望它会有所帮助。

答案 2 :(得分:0)

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

    DataTable myData = new DataTable();
    myDataGridView.AutoGenerateColumns = false;

关闭自动生成非常重要,因此我们可以根据需要设置列。现在向DataTable添加一些数据。在这个例子中,cat:

    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"});

在我们指定了Data及其列之后,我们可以在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);

在添加已定义的列之前,将Data作为DataSource添加到DataGridView中。请注意,每列(DataGridView)的DataPropertyName必须与我们在DataTable中为列提供的名称相同。 HeaderText的名称可以不同。最后匹配列和数据的ValueType。