DataGridViewで現在選択している行の値を取得する - C#

DataGridViewで現在選択している行の値を取得するコードを紹介します。

解説

DataGridViewでは"CurrentRow"プロパティにより現在の行を取得できます。行内のセルにはCellsプロパティでアクセスします。

例1

dataGridView1の選択されている行の一番左の列の値は下記のコードで取得できます。
dataGridView1.CurrentRow.Cells[0].Value;

例2

dataGridView1の選択されている行のColumnのnameが idDataGridViewColumn の列の値は下記のコードで取得できます。
dataGridView1.CurrentRow.Cells["idDataGridViewColumn"].Value;

コード例

Buttonを押すとdataGridView1の現在の行の一番左の列の値をテキストボックスに表示します。

private void button_Click(object sender, EventArgs e)
{
  int id = (int)dataGridView1.CurrentRow.Cells[0].Value;
  textBox.Text = Convert.ToString(id);
}

プログラム例

プロジェクトの作成とデータセットの作成

.NETのWindows Formアプリケーションプロジェクトを作成します。 プロジェクト作成後、データベースを参照するデータセットを作成します。 作成手順の詳細はこちらの記事を参照してください。

UI

下図のフォームを作成します。

コード

以下のコードを記述します。button1のClickイベントを実装します。
using System.Net.Http.Headers;
using System.Xml.Linq;

namespace DataGridViewGetCurrentRow
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void FormMain_Load(object sender, EventArgs e)
    {
      productsTableAdapter1.Fill(iPentecSandboxDataSet1.Products);
    }

    private void button1_Click(object sender, EventArgs e)
    {
      int id = (int)dataGridView1.CurrentRow.Cells[0].Value;
      string name = (string)dataGridView1.CurrentRow.Cells[1].Value;
      decimal price = (decimal)dataGridView1.CurrentRow.Cells[2].Value;
      string category = (string)dataGridView1.CurrentRow.Cells[3].Value;

      textBox1.Text = Convert.ToString(id);
      textBox2.Text = name.Trim();
      textBox3.Text = Convert.ToString(price);
      textBox4.Text = category.Trim();
    }
  }
}

解説

dataGridView1.CurrentRow.Cells[0].Value で現在選択しているDataGridViewの一番左のカラムの値が取得できます。 同様に dataGridView1.CurrentRow.Cells[1].Value で2番目のカラム、dataGridView1.CurrentRow.Cells[2].Value で3番目のカラムの値が取得できます。
  int id = (int)dataGridView1.CurrentRow.Cells[0].Value;
  string name = (string)dataGridView1.CurrentRow.Cells[1].Value;
  decimal price = (decimal)dataGridView1.CurrentRow.Cells[2].Value;
  string category = (string)dataGridView1.CurrentRow.Cells[3].Value;

取得した値をテキストボックスに表示します。
  textBox1.Text = Convert.ToString(id);
  textBox2.Text = name.Trim();
  textBox3.Text = Convert.ToString(price);
  textBox4.Text = category.Trim();

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


値を取得したい行をクリックしてカーソルが移動したことを確認します。


[button1]をクリックします。テキストボックスに現在の行のフィールドの値が表示されます。

列名で取得する場合

列名で取得する場合は以下のコードとなります。
  private void button1_Click(object sender, EventArgs e)
  {
    int id = (int)dataGridView1.CurrentRow.Cells["idDataGridViewTextBoxColumn"].Value;
    string name = (string)dataGridView1.CurrentRow.Cells["nameDataGridViewTextBoxColumn"].Value;
    decimal price = (decimal)dataGridView1.CurrentRow.Cells["priceDataGridViewTextBoxColumn"].Value;
    string category = (string)dataGridView1.CurrentRow.Cells["categoryDataGridViewTextBoxColumn"].Value;

    textBox1.Text = Convert.ToString(id);
    textBox2.Text = name.Trim();
    textBox3.Text = Convert.ToString(price);
    textBox4.Text = category.Trim();
  }

指定する列名を確認します。DataGridViewコントロールのColumnプロパティのダイアログを開きます。


ダイアログの左側のリストで列名を選択します。右側のプロパティ一覧のnameプロパティの値が指定する列名になります。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2012-09-09
改訂日: 2024-09-03
iPentec all rights reserverd.