Как программно добавить ячейку в 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);
Другие вопросы по тегам