在Windows窗体中,我试图通过向DataGridView
插入DataGridViewRows
来手动填充DataGridViewRow row = new DataGridViewRow();
row.CreateCells(dgvArticles);
row.Cells[0].Value = product.Id;
row.Cells[1].Value = product.Description;
.
.
.
dgvArticles.Rows.Add(row);
,因此我的代码如下所示:
row.Cells["code"].Value = product.Id;
row.Cells["description"].Value = product.Description;
但是,我想按列名添加Cell值,而不是通过索引添加它,如下所示:
{{1}}
但是这样做会抛出错误,说它无法找到名为“code”的列。 我正在设计器中设置DataGridView列,如下所示:
我做错了吗?我怎样才能完成我想做的事?
答案 0 :(得分:17)
所以为了完成你想要的方法,需要这样做:
//Create the new row first and get the index of the new row
int rowIndex = this.dataGridView1.Rows.Add();
//Obtain a reference to the newly created DataGridViewRow
var row = this.dataGridView1.Rows[rowIndex];
//Now this won't fail since the row and columns exist
row.Cells["code"].Value = product.Id;
row.Cells["description"].Value = product.Description;
答案 1 :(得分:3)
我也试过了,得到了同样的结果。这有点冗长,但它确实有效:
row.Cells[dataGridView1.Columns["code"].Index].Value = product.Id;
答案 2 :(得分:3)
当您使用DataGridViewCellCollection
的ColumnName索引器时,它会在内部尝试使用此DataGridView
实例的拥有/父DataGridViewRow
中的ColumnName来获取列索引。在您的情况下,该行尚未添加到DataGridView,因此拥有的DataGridView为null。这就是为什么你得到的错误它找不到名为code的列。
IMO最好的方法(与Derek相同)是添加DataGridView
中的行并使用返回的索引从网格中获取行实例,然后使用列名访问单元格
答案 3 :(得分:0)
问题是,在将行添加到DataGridView之前,按名称引用单元格并不起作用。在内部,它使用DataGridViewRow.DataGridView属性来获取列名,但在添加行之前该属性为null。
使用C#7.0的本地功能,可以使代码在中途可读。
DataGridViewRow row = new DataGridViewRow();
row.CreateCells(dgvArticles);
DataGridViewCell CellByName(string columnName)
{
var column = dgvArticles.Columns[columnName];
if (column == null)
throw new InvalidOperationException("Unknown column name: " + columnName);
return row.Cells[column.Index];
}
CellByName("code").Value = product.Id;
CellByName("description").Value = product.Description;
.
.
.
dgvArticles.Rows.Add(row);
答案 4 :(得分:0)
另一种选择:
假设您的DataGridView的名称为 dataGridView1 。
'CPP'