如何以编程方式将单元格添加到 DataGridView?
How to add a Cell programmatically to a DataGridView?
我想向创建的每个列添加一个额外的单元格,其值来自每行中的单元格。我有此代码但不起作用:
i = 0;
Double X1 = Convert.ToDouble(DGV_Points.Rows[i].Cells[6].Value);
Double X2 = Convert.ToDouble(DGV_Points.Rows[i++].Cells[6].Value);
Double LapLength = X1 - X1;
this.DGV_Points.Rows.Add();
this.DGV_Points.Rows[0].Cells[1].Value = LapLength;
this.DGV_Points.Rows[1].Cells[1].Value = LapLength;
我也试过这个例子:
foreach (var item in _model.SelectedItems)
{
var row = new DataGridViewRow();
var codeCell = new DataGridViewComboBoxCell();
codeCell.Items.AddRange(ItemCode.Items);
codeCell.Value = ItemCode.Items.GetListItem(item.Code);
var nameCell = new DataGridViewComboBoxCell();
nameCell.Items.AddRange(ItemName.Items);
nameCell.Value = ItemName.Items.GetListItem(item.Name);
row.Cells.Add(new DataGridViewTextBoxCell { Value = item.Id });
row.Cells.Add(codeCell);
row.Cells.Add(nameCell);
row.Cells.Add(new DataGridViewTextBoxCell { Value = item.Units });
row.Cells.Add(new DataGridViewTextBoxCell { Value = item.Quantity });
row.Cells.Add(new DataGridViewTextBoxCell { Value = item.PriceLt });
row.Cells.Add(new DataGridViewTextBoxCell { Value = item.PriceEu });
itemView.Rows.Add(row);
}
但是还是不行。
有人有什么建议吗?
两种方式:
- 您首先需要有一个
Column
,然后您可以将 Column
中的任何 Cell
替换为您想要创建的任何类型的 Cell
:
DataGridViewTextBoxColumn normalColumn = new DataGridViewTextBoxColumn();
DGV_Points.Columns.Insert(yourColumnIndex, normalColumn);
DGV_Points.Rows.Add(11); // we need at least one row where we can insert a cell
DataGridViewComboBoxCell aCell = new DataGridViewComboBoxCell();
DGV_Points.Rows[someRowIndex].Cells[yourColumnIndex] = aCell;
- 或者您创建
Column
以获得您想要的 ColumnType
,并且 Column
中的所有 Cells
从一开始就拥有正确的 Type
:
DataGridViewComboBoxColumn comboCol = new DataGridViewComboBoxColumn();
comboCol.HeaderText = "yourHeaderText";
DGV_Points.Columns.Insert(yourColumnIndex, comboCol);
请注意,第一种方法只创建与您创建的一样多的 DataGridViewComboBoxCells
,而第二种方法立即在每个 Row
中创建一个 DataGridViewComboBoxCell
。由你决定你想要什么..
而不是 Inserting
在给定的位置,您可能只想 Add
Column
。 Add
方法returnsIndex
新Column
.
由于我们要添加 DataGridViewComboBoxCells
,这里是一个示例,您可以如何填充新下拉单元格的 Items
:
List<string> items1 = new List<string> (){ "111", "222", "333", "444", "555" };
((DataGridViewComboBoxCell)DGV_Points.Rows[2].Cells[0] ).Items
.AddRange(items1.ToArray());
DGV_Points.Rows[2].Cells[0].Value = "222";
这会用五个字符串值填充第 2 行第 0 列单元格的下拉列表,select 值为“222”。请注意,这样您必须填写每个 Cell
的 Items
并且您可以为每个填写不同的值列表以供选择。
你也可以单独设置Cell's DataSource
:aCell.DataSource = items1;
或者你可以为Column
设置:comboCol.DataSource = items1;
你可以这样试试:
DataGridViewRow row = (DataGridViewRow)yourDataGridView.Rows[0].Clone();
row.Cells[0].Value = "XYZ";
row.Cells[1].Value = 50.2;
yourDataGridView.Rows.Add(row);
或
DataGridViewRow row = (DataGridViewRow)yourDataGridView.Rows[0].Clone();
row.Cells["Column2"].Value = "XYZ";
row.Cells["Column6"].Value = 50.2;
yourDataGridView.Rows.Add(row);
我想向创建的每个列添加一个额外的单元格,其值来自每行中的单元格。我有此代码但不起作用:
i = 0;
Double X1 = Convert.ToDouble(DGV_Points.Rows[i].Cells[6].Value);
Double X2 = Convert.ToDouble(DGV_Points.Rows[i++].Cells[6].Value);
Double LapLength = X1 - X1;
this.DGV_Points.Rows.Add();
this.DGV_Points.Rows[0].Cells[1].Value = LapLength;
this.DGV_Points.Rows[1].Cells[1].Value = LapLength;
我也试过这个例子:
foreach (var item in _model.SelectedItems)
{
var row = new DataGridViewRow();
var codeCell = new DataGridViewComboBoxCell();
codeCell.Items.AddRange(ItemCode.Items);
codeCell.Value = ItemCode.Items.GetListItem(item.Code);
var nameCell = new DataGridViewComboBoxCell();
nameCell.Items.AddRange(ItemName.Items);
nameCell.Value = ItemName.Items.GetListItem(item.Name);
row.Cells.Add(new DataGridViewTextBoxCell { Value = item.Id });
row.Cells.Add(codeCell);
row.Cells.Add(nameCell);
row.Cells.Add(new DataGridViewTextBoxCell { Value = item.Units });
row.Cells.Add(new DataGridViewTextBoxCell { Value = item.Quantity });
row.Cells.Add(new DataGridViewTextBoxCell { Value = item.PriceLt });
row.Cells.Add(new DataGridViewTextBoxCell { Value = item.PriceEu });
itemView.Rows.Add(row);
}
但是还是不行。
有人有什么建议吗?
两种方式:
- 您首先需要有一个
Column
,然后您可以将Column
中的任何Cell
替换为您想要创建的任何类型的Cell
:
DataGridViewTextBoxColumn normalColumn = new DataGridViewTextBoxColumn();
DGV_Points.Columns.Insert(yourColumnIndex, normalColumn);
DGV_Points.Rows.Add(11); // we need at least one row where we can insert a cell
DataGridViewComboBoxCell aCell = new DataGridViewComboBoxCell();
DGV_Points.Rows[someRowIndex].Cells[yourColumnIndex] = aCell;
- 或者您创建
Column
以获得您想要的ColumnType
,并且Column
中的所有Cells
从一开始就拥有正确的Type
:
DataGridViewComboBoxColumn comboCol = new DataGridViewComboBoxColumn();
comboCol.HeaderText = "yourHeaderText";
DGV_Points.Columns.Insert(yourColumnIndex, comboCol);
请注意,第一种方法只创建与您创建的一样多的 DataGridViewComboBoxCells
,而第二种方法立即在每个 Row
中创建一个 DataGridViewComboBoxCell
。由你决定你想要什么..
而不是 Inserting
在给定的位置,您可能只想 Add
Column
。 Add
方法returnsIndex
新Column
.
由于我们要添加 DataGridViewComboBoxCells
,这里是一个示例,您可以如何填充新下拉单元格的 Items
:
List<string> items1 = new List<string> (){ "111", "222", "333", "444", "555" };
((DataGridViewComboBoxCell)DGV_Points.Rows[2].Cells[0] ).Items
.AddRange(items1.ToArray());
DGV_Points.Rows[2].Cells[0].Value = "222";
这会用五个字符串值填充第 2 行第 0 列单元格的下拉列表,select 值为“222”。请注意,这样您必须填写每个 Cell
的 Items
并且您可以为每个填写不同的值列表以供选择。
你也可以单独设置Cell's DataSource
:aCell.DataSource = items1;
或者你可以为Column
设置:comboCol.DataSource = items1;
你可以这样试试:
DataGridViewRow row = (DataGridViewRow)yourDataGridView.Rows[0].Clone();
row.Cells[0].Value = "XYZ";
row.Cells[1].Value = 50.2;
yourDataGridView.Rows.Add(row);
或
DataGridViewRow row = (DataGridViewRow)yourDataGridView.Rows[0].Clone();
row.Cells["Column2"].Value = "XYZ";
row.Cells["Column6"].Value = 50.2;
yourDataGridView.Rows.Add(row);