有人可以向我解释如何将DataGridViewComboBoxCell添加到dataGridView吗? 代码是这样的:
foreach(....){
DataGridViewComboBoxCell cmb = new DataGridViewComboBoxCell();
//cmb.item.add(....
dataGridView.Rows.Add(new object[] {cmb,name,surname}); }
网格中的第一个单元格是DataGridViewComboBoxColumn的类型,我尝试将cmb更改为DataGridViewComboBoxColumn,但仍然没有。
我handeld DataError所以我没有得到"值无效"错误,但我在datagridview中的组合框是空的。
答案 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。