19

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);

ただし、次のように、インデックスで行うのではなく、列名で Cell 値を追加したいと思います。

row.Cells["code"].Value = product.Id;
row.Cells["description"].Value = product.Description;

しかし、そのようにすると、「コード」という名前の列が見つからないというエラーがスローされます。次のように、デザイナーから DataGridView 列を設定しています。 DataGridViewDesigner の列

私は何か間違ったことをしていますか?どうすればやりたいことを達成できますか?

4

5 に答える 5

23

したがって、希望するアプローチを実現するには、次のようにする必要があります。

//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;
于 2014-03-02T04:39:16.877 に答える
4

私も試してみましたが、同じ結果が得られました。これは少し冗長ですが、機能します。

row.Cells[dataGridView1.Columns["code"].Index].Value = product.Id;
于 2014-03-02T03:29:05.770 に答える
3

の ColumnName インデクサーを使用するとDataGridViewCellCollection、内部的にDataGridView、このDataGridViewRowインスタンスの所有者/親からの ColumnName を使用して列インデックスを取得しようとします。あなたの場合、行は DataGridView に追加されていないため、所有する DataGridView は null です。コードという名前の列が見つからないというエラーが表示されるのはそのためです。

IMO の最良のアプローチ (Derek と同じ) は、行を追加しDataGridView、返されたインデックスを使用してグリッドから行インスタンスを取得し、列名を使用してセルにアクセスすることです。

于 2014-03-02T08:10:46.433 に答える