[C#] DataGridViewで選択行を取得・書き換えする方法
C#のDataGridViewで選択行を取得するには、SelectedRows
プロパティを使用します。
これは選択された行のコレクションを返します。
例えば、最初の選択行を取得するにはdataGridView.SelectedRows[0]
を使用します。
選択行の特定のセルの値を取得または書き換えるには、Rows
プロパティとCells
プロパティを組み合わせます。
例えば、1列目の値を取得するにはdataGridView.SelectedRows[0].Cells[0].Value
を使用し、書き換えるにはdataGridView.SelectedRows[0].Cells[0].Value = 新しい値
とします。
これにより、ユーザーが選択した行のデータを動的に操作できます。
- DataGridViewで選択行を取得する方法
- セルの値を操作する手法
- イベントを活用したデータ処理
- 選択行のデータを活用する応用例
- パフォーマンス向上のための設定
選択行の取得方法
SelectedRowsプロパティの使い方
DataGridView
コントロールのSelectedRows
プロパティを使用すると、現在選択されている行のコレクションを取得できます。
このプロパティは、選択された行の情報を簡単に取得するために非常に便利です。
以下は、SelectedRows
プロパティを使用して選択行のデータを取得するサンプルコードです。
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
private void GetSelectedRows()
{
// 選択された行のコレクションを取得
DataGridViewSelectedRowCollection selectedRows = dataGridView1.SelectedRows;
// 選択された行の数を表示
MessageBox.Show($"選択された行の数: {selectedRows.Count}");
// 各選択行のデータを表示
foreach (DataGridViewRow row in selectedRows)
{
string rowData = row.Cells[0].Value.ToString(); // 1列目のデータを取得
MessageBox.Show($"選択行のデータ: {rowData}");
}
}
}
このコードでは、dataGridView1
から選択された行を取得し、その数をメッセージボックスで表示しています。
また、各選択行の1列目のデータも表示しています。
選択行のインデックスを取得する
選択行のインデックスを取得するには、DataGridView
のCurrentRow
プロパティを使用します。
以下のサンプルコードでは、選択された行のインデックスを取得し、表示します。
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
private void GetSelectedRowIndex()
{
// 現在選択されている行のインデックスを取得
int selectedIndex = dataGridView1.CurrentRow.Index;
// インデックスを表示
MessageBox.Show($"選択された行のインデックス: {selectedIndex}");
}
}
このコードでは、CurrentRow
プロパティを使用して選択された行のインデックスを取得し、メッセージボックスで表示しています。
複数行選択時の処理
DataGridView
で複数行を選択する場合、SelectedRows
プロパティを使用して、選択されたすべての行を処理することができます。
以下のサンプルコードでは、複数行が選択されている場合に、それぞれの行のデータを表示します。
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
private void GetMultipleSelectedRows()
{
// 選択された行のコレクションを取得
DataGridViewSelectedRowCollection selectedRows = dataGridView1.SelectedRows;
// 各選択行のデータを表示
foreach (DataGridViewRow row in selectedRows)
{
string rowData = row.Cells[0].Value.ToString(); // 1列目のデータを取得
MessageBox.Show($"選択行のデータ: {rowData}");
}
}
}
このコードでは、選択されたすべての行の1列目のデータをメッセージボックスで表示しています。
複数行が選択されている場合でも、簡単に処理を行うことができます。
選択行のデータ操作
セルの値を取得する方法
DataGridView
の選択行から特定のセルの値を取得するには、Cells
プロパティを使用します。
以下のサンプルコードでは、選択された行の特定のセルの値を取得し、表示します。
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
private void GetCellValue()
{
// 選択された行があるか確認
if (dataGridView1.SelectedRows.Count > 0)
{
// 最初の選択行の1列目のセルの値を取得
string cellValue = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
// セルの値を表示
MessageBox.Show($"選択行の1列目のセルの値: {cellValue}");
}
else
{
MessageBox.Show("選択された行がありません。");
}
}
}
このコードでは、選択された行が存在する場合に、最初の選択行の1列目のセルの値を取得し、メッセージボックスで表示します。
選択行がない場合は、その旨を表示します。
セルの値を変更する方法
選択行の特定のセルの値を変更するには、Cells
プロパティを使用して新しい値を代入します。
以下のサンプルコードでは、選択された行の1列目のセルの値を変更します。
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
private void UpdateCellValue()
{
// 選択された行があるか確認
if (dataGridView1.SelectedRows.Count > 0)
{
// 最初の選択行の1列目のセルの値を変更
dataGridView1.SelectedRows[0].Cells[0].Value = "新しい値";
// 更新後のセルの値を表示
MessageBox.Show("セルの値を変更しました。");
}
else
{
MessageBox.Show("選択された行がありません。");
}
}
}
このコードでは、選択された行が存在する場合に、最初の選択行の1列目のセルの値を「新しい値」に変更し、変更完了のメッセージを表示します。
選択行がない場合は、その旨を表示します。
行全体のデータを更新する方法
選択行の全てのセルの値を一度に更新するには、Cells
プロパティを使用して各セルに新しい値を代入します。
以下のサンプルコードでは、選択された行のすべてのセルの値を更新します。
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
private void UpdateRowData()
{
// 選択された行があるか確認
if (dataGridView1.SelectedRows.Count > 0)
{
// 最初の選択行の各セルの値を更新
DataGridViewRow selectedRow = dataGridView1.SelectedRows[0];
selectedRow.Cells[0].Value = "新しい値1"; // 1列目
selectedRow.Cells[1].Value = "新しい値2"; // 2列目
selectedRow.Cells[2].Value = "新しい値3"; // 3列目
// 更新完了のメッセージを表示
MessageBox.Show("行のデータを変更しました。");
}
else
{
MessageBox.Show("選択された行がありません。");
}
}
}
このコードでは、選択された行が存在する場合に、最初の選択行の各セルの値をそれぞれ「新しい値1」、「新しい値2」、「新しい値3」に変更し、変更完了のメッセージを表示します。
選択行がない場合は、その旨を表示します。
DataGridViewのイベント活用
SelectionChangedイベントの使い方
DataGridView
のSelectionChanged
イベントは、選択行が変更されたときに発生します。
このイベントを利用することで、選択された行のデータをリアルタイムで取得したり、他のコントロールに反映させたりすることができます。
以下のサンプルコードでは、選択行が変更された際に、その行のデータを表示します。
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// SelectionChangedイベントにイベントハンドラを追加
dataGridView1.SelectionChanged += DataGridView1_SelectionChanged;
}
private void DataGridView1_SelectionChanged(object sender, EventArgs e)
{
// 選択された行があるか確認
if (dataGridView1.SelectedRows.Count > 0)
{
// 最初の選択行の1列目のセルの値を取得
string cellValue = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
// セルの値を表示
MessageBox.Show($"選択行の1列目のセルの値: {cellValue}");
}
}
}
このコードでは、SelectionChanged
イベントが発生するたびに、選択された行の1列目のセルの値をメッセージボックスで表示します。
CellValueChangedイベントでの処理
CellValueChanged
イベントは、セルの値が変更されたときに発生します。
このイベントを利用することで、セルの値が変更された際に特定の処理を実行することができます。
以下のサンプルコードでは、セルの値が変更された際に、その新しい値を表示します。
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// CellValueChangedイベントにイベントハンドラを追加
dataGridView1.CellValueChanged += DataGridView1_CellValueChanged;
}
private void DataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
// 変更されたセルの新しい値を取得
string newValue = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
// 新しい値を表示
MessageBox.Show($"セルの新しい値: {newValue}");
}
}
このコードでは、CellValueChanged
イベントが発生するたびに、変更されたセルの新しい値をメッセージボックスで表示します。
RowEnterイベントでの行データ取得
RowEnter
イベントは、行が選択されたときに発生します。
このイベントを利用することで、選択された行のデータを取得し、他のコントロールに表示することができます。
以下のサンプルコードでは、行が選択された際に、その行のデータを表示します。
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// RowEnterイベントにイベントハンドラを追加
dataGridView1.RowEnter += DataGridView1_RowEnter;
}
private void DataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
{
// 選択された行の1列目のセルの値を取得
string cellValue = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
// セルの値を表示
MessageBox.Show($"選択された行の1列目のセルの値: {cellValue}");
}
}
このコードでは、RowEnter
イベントが発生するたびに、選択された行の1列目のセルの値をメッセージボックスで表示します。
これにより、ユーザーが行を選択するたびに、その行のデータを確認することができます。
応用例
選択行のデータを別のコントロールに表示する
選択行のデータを別のコントロール(例えば、TextBox
)に表示することで、ユーザーが選択したデータを簡単に確認できるようにすることができます。
以下のサンプルコードでは、選択された行の1列目のデータをTextBox
に表示します。
partial class MyForm : Form
{
private TextBox textBox1;
public MyForm()
{
InitializeComponent();
textBox1 = new TextBox { Location = new Point(10, 10), Width = 200 };
this.Controls.Add(textBox1);
dataGridView1.SelectionChanged += DataGridView1_SelectionChanged;
}
private void DataGridView1_SelectionChanged(object sender, EventArgs e)
{
// 選択された行があるか確認
if (dataGridView1.SelectedRows.Count > 0)
{
// 最初の選択行の1列目のセルの値を取得
string cellValue = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
// TextBoxに表示
textBox1.Text = cellValue;
}
}
}
このコードでは、SelectionChanged
イベントを利用して、選択された行の1列目のデータをTextBox
に表示しています。
選択行のデータをデータベースに保存する
選択行のデータをデータベースに保存することで、アプリケーションのデータを永続化することができます。
以下のサンプルコードでは、選択された行のデータをSQLiteデータベースに保存します。
using System.Data.SQLite;
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
private void SaveSelectedRowToDatabase()
{
// 選択された行があるか確認
if (dataGridView1.SelectedRows.Count > 0)
{
// 最初の選択行のデータを取得
string cellValue = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
// データベース接続
using (SQLiteConnection connection = new SQLiteConnection("Data Source=mydatabase.db;Version=3;"))
{
connection.Open();
string query = "INSERT INTO MyTable (ColumnName) VALUES (@value)";
using (SQLiteCommand command = new SQLiteCommand(query, connection))
{
command.Parameters.AddWithValue("@value", cellValue);
command.ExecuteNonQuery();
}
}
MessageBox.Show("データをデータベースに保存しました。");
}
else
{
MessageBox.Show("選択された行がありません。");
}
}
}
このコードでは、選択された行の1列目のデータをSQLiteデータベースに保存しています。
データベース接続を行い、SQL文を実行してデータを挿入します。
選択行のデータをCSVファイルにエクスポートする
選択行のデータをCSVファイルにエクスポートすることで、データを外部で利用できるようにすることができます。
以下のサンプルコードでは、選択された行のデータをCSVファイルに書き出します。
using System.IO;
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
private void ExportSelectedRowToCSV()
{
// 選択された行があるか確認
if (dataGridView1.SelectedRows.Count > 0)
{
// CSVファイルのパス
string filePath = "exported_data.csv";
using (StreamWriter writer = new StreamWriter(filePath, true))
{
// 最初の選択行のデータを取得
DataGridViewRow selectedRow = dataGridView1.SelectedRows[0];
string rowData = string.Join(",", selectedRow.Cells.Cast<DataGridViewCell>().Select(cell => cell.Value.ToString()));
// CSVファイルに書き込む
writer.WriteLine(rowData);
}
MessageBox.Show("データをCSVファイルにエクスポートしました。");
}
else
{
MessageBox.Show("選択された行がありません。");
}
}
}
このコードでは、選択された行のすべてのセルのデータをCSV形式でファイルに書き出しています。
StreamWriter
を使用してファイルにデータを追加し、エクスポート完了のメッセージを表示します。
よくある質問
まとめ
この記事では、C#のDataGridView
を使用して選択行の取得やデータ操作、イベントの活用方法について詳しく解説しました。
特に、選択行のデータを別のコントロールに表示したり、データベースに保存したり、CSVファイルにエクスポートする方法など、実用的な応用例を紹介しました。
これらの知識を活用して、よりインタラクティブで使いやすいアプリケーションを作成することができるでしょう。
ぜひ、実際のプロジェクトに取り入れて、DataGridView
の機能を最大限に活用してみてください。