DataGridView:特定のセルの値を更新(書き換え)する(サンプルあり)

📋 目次(クリックで展開)

DataGridView に表示されているデータから、「〇行目の〇列目の値をプログラムから書き換えたい」という場面はよくあります。

C# の DataGridView では、値を取得するときとほぼ同じ形で、Rows[行].Cells[列].Value = 新しい値; とイコールで値を代入することで、特定のセルの値を簡単に変更することができます。

今回は、ボタンをクリックした瞬間に指定したセルの値を書き換える実装コードを解説します。

値を変更する仕組み

DataGridView のセルへの値のセットは、「行(Row)」「列(Cell)」 の番号や名前を指定してアクセスします。

基本の形は以下の通りです。

dataGridView1.Rows[行].Cells[列].Value = 新しい値;
  • 行の指定方法:上から順番に 0, 1, 2... と数えます(0からスタートするため、2行目は Rows[1] になります)。
  • 列の指定方法"Name" などの列名(文字列) で指定する方法のほか、左から順番に 0, 1, 2... という列インデックス(数字) で指定することもできます。

実装コード

画面に DataGridView(dataGridView1)と、値を変更するためのボタン(btnUpdateCell)が配置されているものとします。ボタンをクリックすると、2行目の「Name」列の値を新しい文字列に書き換えるシンプルな実装コードです。

Form1.cs

Form1.cs
using System.Data;
namespace DataGridView_UpdateSpecificCell;
public partial class Form1 : Form
{
private DataTable _dataTable = new DataTable();
public Form1()
{
InitializeComponent();
InitializeData();
InitializeDataGridView();
}
private void InitializeData()
{
// テストデータの準備(元記事のデータをそのまま流用)
_dataTable.Columns.Add("ID", typeof(string));
_dataTable.Columns.Add("Name", typeof(string));
_dataTable.Columns.Add("Price", typeof(int));
_dataTable.Rows.Add("P001", "ノートパソコン", 120000);
_dataTable.Rows.Add("P002", "USBメモリ", 2500);
_dataTable.Rows.Add("P003", "液晶モニター", 35000);
}
private void InitializeDataGridView()
{
dataGridView1.DataSource = _dataTable;
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
// ボタンのクリックイベントを購読
btnUpdateCell.Click += BtnUpdateCell_Click;
}
/// <summary>
/// 「セル値変更」ボタンのクリックイベント
/// </summary>
private void BtnUpdateCell_Click(object? sender, EventArgs e)
{
// 💡 2行目(インデックス1)の「Name」列の値を「大容量USBメモリ」に書き換える
this.dataGridView1.Rows[1].Cells["Name"].Value = "大容量USBメモリ";
MessageBox.Show(
"2行目の「Name」列の値を変更しました!",
"セル値変更", MessageBoxButtons.OK, MessageBoxIcon.Information
);
}
}

ソースコード

サンプルアプリケーション

ボタンをクリックすると、2行目「Name」列の値が「USBメモリ」から「大容量USBメモリ」に更新されることが分かります。

DataGridView_UpdateSpecificCell.zip
※ サンプルアプリケーションは、.NET 10 をターゲットに作成しています。

実装のポイント

1. 列の指定は「数字」でも同じように動く

サンプルコードでは Cells["Name"] と列の名前で指定していますが、ここを列インデックス(番号)に変えても同じように動作します。

今回のデータは左から「ID(0番目)」、「Name(1番目)」、「Price(2番目)」の順番で並んでいるため、以下のように書くことも可能です。

// 💡 列名ではなく、左から2番目(インデックス1)という数字の指定でも値を書き換えられます
this.dataGridView1.Rows[1].Cells[1].Value = "大容量USBメモリ";
  • 列名指定("Name":後から列の順番をマウスで入れ替えても、狙った列の値を書き換えられるため、実務向きで安全です。
  • 数字指定(1:コードが短くスッキリ書けるメリットがあります。

2. 「2行目」を変更するときは “Rows[1]”

プログラムの世界では配列やコレクションは 0 から数え始めます。

  • 1行目を変更したい ➡️ Rows[0]
  • 2行目を変更したい ➡️ Rows[1]
  • 3行目を変更したい ➡️ Rows[2]

そのため、コード内の Rows[1] は「上から2番目の行」を指している点に注意下さい。

3. データ型(型)に注意して代入する

値を変更する際の注意点として、「その列が何のデータ型で定義されているか」 を意識する必要があります。 今回のサンプルの「Name」列は文字列(string)型なので "大容量USBメモリ" のように文字を代入してOKですが、もし「Price」列の値を書き換えたい場合は、以下のように数値(int)型に合わせて数字を代入する必要があります。

// ❌ エラー:Price列は数値型なので、文字を代入するとシステムが混乱します
this.dataGridView1.Rows[1].Cells["Price"].Value = "3000";
// ⭕ 正解:数値型の列には、ダブルクォーテーションをつけずに数字のまま代入します
this.dataGridView1.Rows[1].Cells["Price"].Value = 3000;

まとめ

DataGridView の値を変更する基本は、Rows[行].Cells[列].Value = 新しい値; となります。

  • 値の変更は、セルを指定してイコール = で新しい値を代入する
  • 行の指定は 0 から数える(2行目は Rows[1]
  • 列の指定は "Name"(列名)と 1(左からの番号)のどちらでも動く
  • 数値型の列(Priceなど)に値を代入するときは、文字ではなく数字をセットする

💬 コメント