Как программно добавить ячейку в 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);
}
Но это также не работает.
У кого-нибудь есть предложения?
2 ответа
Два пути:
- Вам нужно иметь
Column
Сначала вы можете заменить любойCell
вColumn
каким бы типом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
ты хочешь и всеCells
вColumn
будет иметь правоType
с начала:
DataGridViewComboBoxColumn comboCol = new DataGridViewComboBoxColumn();
comboCol.HeaderText = "yourHeaderText";
DGV_Points.Columns.Insert(yourColumnIndex, comboCol);
Обратите внимание, что первый метод создает только столько DataGridViewComboBoxCells
как вы делаете это в то время как второй способ немедленно создать DataGridViewComboBoxCell
в каждом Row
, Вам решать, что вы хотите..
Вместо или Inserting
в данной позиции вы можете просто захотеть Add
Column
, Add
метод возвращает Index
нового 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 пятью строковыми значениями и выбирает значение, равное "222". Обратите внимание, что таким образом вы должны заполнить Items
каждого Cell
и вы можете заполнить каждый со своим списком значений на выбор.
Вы также можете установить индивидуальный 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);