[C#] DataGridViewでのデータ表示方法
C#のDataGridViewは、Windows Formsアプリケーションでデータを表形式で表示するためのコントロールです。
データを表示するには、まずDataGridViewをフォームに追加し、データソースを設定します。
データソースには、データベースから取得したデータを格納したDataTableや、オブジェクトのリスト(List<T>)などを使用できます。
DataSourceプロパティにこれらのデータをバインドすることで、DataGridViewにデータが表示されます。
また、列の自動生成を有効にすることで、データソースに基づいて自動的に列が作成されます。
カスタム列を追加したり、セルのスタイルを変更することも可能です。
DataGridViewの設定方法
DataGridViewの追加
C#のWindowsフォームアプリケーションでDataGridViewを使用するには、まずフォームにDataGridViewコントロールを追加します。
Visual Studioのツールボックスからドラッグ&ドロップすることで簡単に追加できます。
以下は、DataGridViewをフォームに追加するための基本的なコードです。
partial class MyForm : Form
{
private DataGridView dataGridView1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
InitializeDataGridView(); // DataGridViewの初期化
}
private void InitializeDataGridView()
{
dataGridView1 = new DataGridView(); // DataGridViewのインスタンスを作成
dataGridView1.Location = new Point(10, 10); // 位置を設定
dataGridView1.Size = new Size(400, 250); // サイズを設定
this.Controls.Add(dataGridView1); // フォームに追加
}
}
このコードでは、InitializeDataGridViewメソッド
内でDataGridViewのインスタンスを作成し、位置とサイズを設定しています。
最後に、this.Controls.Add(dataGridView1);
でフォームに追加しています。
プロパティの設定
DataGridViewのプロパティを設定することで、表示や動作をカスタマイズできます。
以下に、主なプロパティの設定方法を示します。
プロパティ名 | 説明 |
---|---|
AutoGenerateColumns | 列を自動生成するかどうかを設定 |
ColumnHeadersHeight | 列ヘッダーの高さを設定 |
RowHeadersVisible | 行ヘッダーの表示/非表示を設定 |
列の自動生成
AutoGenerateColumns
プロパティをtrue
に設定すると、データソースに基づいて列が自動的に生成されます。
以下はその設定例です。
dataGridView1.AutoGenerateColumns = true; // 列を自動生成
ヘッダーの設定
列ヘッダーの高さやテキストを設定することができます。
以下は、ヘッダーの高さを設定する例です。
dataGridView1.ColumnHeadersHeight = 30; // 列ヘッダーの高さを30に設定
セルのスタイル設定
セルのスタイルを変更することで、見た目をカスタマイズできます。
以下は、セルの背景色を変更する例です。
dataGridView1.DefaultCellStyle.BackColor = Color.LightBlue; // セルの背景色を設定
これらの設定を行うことで、DataGridViewの見た目や動作を自分のアプリケーションに合わせて調整することができます。
データのバインド
DataSourceプロパティの使用
DataGridViewにデータを表示するためには、DataSource
プロパティを使用します。
このプロパティにデータソースを設定することで、DataGridViewにデータを簡単にバインドできます。
以下は、DataSource
プロパティを使用してデータをバインドする基本的な例です。
partial class MyForm : Form
{
private DataGridView dataGridView1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
InitializeDataGridView(); // DataGridViewの初期化
BindData(); // データのバインド
}
private void BindData()
{
var data = new List<string> { "データ1", "データ2", "データ3" }; // データのリスト
dataGridView1.DataSource = data; // DataSourceにデータを設定
}
}
このコードでは、BindDataメソッド
内でリストを作成し、DataSource
プロパティに設定しています。
これにより、DataGridViewにデータが表示されます。
DataTableを使用したデータバインド
DataTable
を使用すると、より複雑なデータ構造をDataGridViewにバインドできます。
以下は、DataTable
を使用してデータをバインドする例です。
private void BindDataTable()
{
DataTable dataTable = new DataTable(); // DataTableのインスタンスを作成
dataTable.Columns.Add("ID", typeof(int)); // 列を追加
dataTable.Columns.Add("名前", typeof(string)); // 列を追加
// データを追加
dataTable.Rows.Add(1, "山田太郎");
dataTable.Rows.Add(2, "佐藤花子");
dataTable.Rows.Add(3, "鈴木一郎");
dataGridView1.DataSource = dataTable; // DataSourceにDataTableを設定
}
このコードでは、DataTable
を作成し、列を追加した後、行を追加しています。
最後に、DataSource
プロパティにDataTable
を設定することで、DataGridViewにデータが表示されます。
List<T>を使用したデータバインド
List<T>
を使用することで、カスタムクラスのリストをDataGridViewにバインドすることも可能です。
以下は、カスタムクラスを使用したデータバインドの例です。
public class Person
{
public int ID { get; set; } // IDプロパティ
public string Name { get; set; } // 名前プロパティ
}
private void BindList()
{
List<Person> people = new List<Person> // Personクラスのリストを作成
{
new Person { ID = 1, Name = "山田太郎" },
new Person { ID = 2, Name = "佐藤花子" },
new Person { ID = 3, Name = "鈴木一郎" }
};
dataGridView1.DataSource = people; // DataSourceにList<Person>を設定
}
このコードでは、Personクラス
を定義し、そのリストを作成しています。
DataSource
プロパティにリストを設定することで、DataGridViewにカスタムデータが表示されます。
これにより、オブジェクト指向プログラミングの利点を活かしたデータバインドが可能になります。
データの操作
データの追加
DataGridViewに新しいデータを追加するには、Rows.Addメソッド
を使用します。
以下は、DataGridViewに新しい行を追加する例です。
private void AddData()
{
// 新しい行を追加
dataGridView1.Rows.Add(4, "田中次郎"); // IDと名前を指定
}
このコードでは、AddDataメソッド
内でRows.Addメソッド
を使用して新しい行を追加しています。
引数には、追加するデータを指定します。
これにより、DataGridViewに新しいデータが表示されます。
データの編集
DataGridView内のデータを編集するには、特定のセルにアクセスして値を変更します。
以下は、特定の行と列のデータを編集する例です。
private void EditData()
{
// 1行目の名前を変更
dataGridView1.Rows[0].Cells[1].Value = "山田花子"; // 行インデックス0、列インデックス1
}
このコードでは、EditDataメソッド
内で1行目の名前を変更しています。
Rows[0].Cells[1].Value
を使用して、特定のセルにアクセスし、新しい値を設定しています。
これにより、DataGridView内のデータが更新されます。
データの削除
DataGridViewからデータを削除するには、Rows.RemoveAtメソッド
を使用します。
以下は、特定の行を削除する例です。
private void DeleteData()
{
// 1行目を削除
if (dataGridView1.Rows.Count > 0) // 行が存在する場合
{
dataGridView1.Rows.RemoveAt(0); // 行インデックス0を削除
}
}
このコードでは、DeleteDataメソッド
内で1行目を削除しています。
RemoveAtメソッド
を使用して、指定したインデックスの行を削除します。
行が存在するかどうかを確認することで、エラーを防ぐことができます。
これにより、DataGridViewからデータを安全に削除できます。
カスタマイズとスタイリング
カスタム列の追加
DataGridViewにカスタム列を追加することで、特定のデータを表示するための柔軟性を持たせることができます。
以下は、カスタム列を追加する例です。
private void AddCustomColumn()
{
// カスタム列を作成
DataGridViewTextBoxColumn textColumn = new DataGridViewTextBoxColumn
{
HeaderText = "カスタム列", // ヘッダーのテキスト
Name = "CustomColumn", // 列名
Width = 150 // 幅を設定
};
dataGridView1.Columns.Add(textColumn); // DataGridViewにカスタム列を追加
}
このコードでは、DataGridViewTextBoxColumn
を使用してカスタム列を作成し、HeaderText
やName
を設定しています。
最後に、Columns.Addメソッド
を使用してDataGridViewに追加しています。
これにより、カスタム列が表示されます。
セルのスタイル変更
DataGridViewのセルのスタイルを変更することで、見た目をカスタマイズできます。
以下は、特定のセルのフォントや背景色を変更する例です。
private void ChangeCellStyle()
{
// 特定のセルのスタイルを変更
dataGridView1.Rows[0].Cells[0].Style.BackColor = Color.LightGreen; // 背景色を変更
dataGridView1.Rows[0].Cells[0].Style.Font = new Font("Arial", 12, FontStyle.Bold); // フォントを変更
}
このコードでは、1行目の1列目のセルの背景色を緑色に変更し、フォントを太字のArialに設定しています。
これにより、特定のセルのスタイルが変更され、視覚的に強調されます。
条件付き書式の適用
条件付き書式を使用することで、特定の条件に基づいてセルのスタイルを変更できます。
以下は、値が特定の条件を満たす場合にセルの色を変更する例です。
private void ApplyConditionalFormatting()
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (Convert.ToInt32(row.Cells[0].Value) > 2) // 1列目の値が2より大きい場合
{
row.Cells[0].Style.BackColor = Color.Red; // 背景色を赤に変更
}
}
}
このコードでは、DataGridViewの各行をループし、1列目の値が2より大きい場合にそのセルの背景色を赤に変更しています。
これにより、特定の条件を満たすデータが視覚的に強調され、ユーザーにとってわかりやすくなります。
イベント処理
セルクリックイベント
DataGridViewのセルがクリックされたときに特定の処理を実行するには、CellClick
イベントを使用します。
以下は、セルがクリックされたときにそのセルの値を表示する例です。
private void MyForm_Load(object sender, EventArgs e)
{
dataGridView1.CellClick += DataGridView1_CellClick; // セルクリックイベントを登録
}
private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0) // 有効な行がクリックされた場合
{
var cellValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; // セルの値を取得
MessageBox.Show($"クリックしたセルの値: {cellValue}"); // 値を表示
}
}
このコードでは、MyForm_Loadメソッド
内でCellClick
イベントを登録し、DataGridView1_CellClickメソッド
でクリックされたセルの値を取得して表示しています。
これにより、ユーザーがセルをクリックしたときにその値を確認できます。
セル値変更イベント
セルの値が変更されたときに特定の処理を実行するには、CellValueChanged
イベントを使用します。
以下は、セルの値が変更されたときにその値を表示する例です。
private void MyForm_Load(object sender, EventArgs e)
{
dataGridView1.CellValueChanged += DataGridView1_CellValueChanged; // セル値変更イベントを登録
dataGridView1.CurrentCellDirtyStateChanged += DataGridView1_CurrentCellDirtyStateChanged; // 状態変更イベントを登録
}
private void DataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty) // 現在のセルが変更された場合
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit); // 編集を確定
}
}
private void DataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0) // 有効な行が変更された場合
{
var newValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; // 新しい値を取得
MessageBox.Show($"セルの値が変更されました: {newValue}"); // 新しい値を表示
}
}
このコードでは、CellValueChanged
イベントを使用してセルの値が変更されたときにその新しい値を表示しています。
また、CurrentCellDirtyStateChanged
イベントを使用して、セルの編集を確定させる処理も追加しています。
これにより、ユーザーがセルの値を変更した際に即座に反応できます。
行選択イベント
DataGridViewの行が選択されたときに特定の処理を実行するには、SelectionChanged
イベントを使用します。
以下は、行が選択されたときにその行のデータを表示する例です。
private void MyForm_Load(object sender, EventArgs e)
{
dataGridView1.SelectionChanged += DataGridView1_SelectionChanged; // 行選択イベントを登録
}
private void DataGridView1_SelectionChanged(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count > 0) // 選択された行がある場合
{
var selectedRow = dataGridView1.SelectedRows[0]; // 最初の選択行を取得
var id = selectedRow.Cells[0].Value; // IDを取得
var name = selectedRow.Cells[1].Value; // 名前を取得
MessageBox.Show($"選択された行のデータ: ID = {id}, 名前 = {name}"); // データを表示
}
}
このコードでは、SelectionChanged
イベントを使用して行が選択されたときにその行のデータを表示しています。
選択された行の情報を取得し、メッセージボックスで表示することで、ユーザーに選択したデータを確認させることができます。
これにより、DataGridViewのインタラクティブな操作が可能になります。
応用例
フィルタリングとソート
DataGridViewでは、表示されているデータをフィルタリングしたりソートしたりすることができます。
以下は、特定の条件に基づいてデータをフィルタリングし、ソートする例です。
private void FilterAndSortData()
{
// DataTableを作成
DataTable dataTable = new DataTable();
dataTable.Columns.Add("ID", typeof(int));
dataTable.Columns.Add("名前", typeof(string));
// データを追加
dataTable.Rows.Add(1, "山田太郎");
dataTable.Rows.Add(2, "佐藤花子");
dataTable.Rows.Add(3, "鈴木一郎");
// DataGridViewにデータをバインド
dataGridView1.DataSource = dataTable;
// フィルタリング
DataView dataView = new DataView(dataTable);
dataView.RowFilter = "ID > 1"; // IDが1より大きい行を表示
// ソート
dataView.Sort = "名前 ASC"; // 名前で昇順にソート
// フィルタリングされたデータを再バインド
dataGridView1.DataSource = dataView;
}
このコードでは、DataView
を使用してデータをフィルタリングし、特定の条件に基づいてソートしています。
RowFilter
プロパティを使用して条件を設定し、Sort
プロパティでソート順を指定しています。
これにより、DataGridViewに表示されるデータが動的に変更されます。
データのエクスポート
DataGridViewのデータをCSVファイルなどにエクスポートすることも可能です。
以下は、DataGridViewのデータをCSV形式でエクスポートする例です。
private void ExportDataToCSV(string filePath)
{
StringBuilder csvContent = new StringBuilder();
// ヘッダーを追加
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
csvContent.Append(column.HeaderText + ",");
}
csvContent.AppendLine();
// データを追加
foreach (DataGridViewRow row in dataGridView1.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
csvContent.Append(cell.Value + ",");
}
csvContent.AppendLine();
}
// CSVファイルに書き込む
File.WriteAllText(filePath, csvContent.ToString(), Encoding.UTF8);
}
このコードでは、StringBuilder
を使用してCSV形式の文字列を作成し、File.WriteAllTextメソッド
で指定したファイルパスに書き込んでいます。
これにより、DataGridViewのデータを簡単にエクスポートできます。
データのインポート
CSVファイルなどからデータをDataGridViewにインポートすることもできます。
以下は、CSVファイルからデータを読み込み、DataGridViewに表示する例です。
private void ImportDataFromCSV(string filePath)
{
DataTable dataTable = new DataTable();
dataTable.Columns.Add("ID", typeof(int));
dataTable.Columns.Add("名前", typeof(string));
// CSVファイルを読み込む
var lines = File.ReadAllLines(filePath, Encoding.UTF8);
foreach (var line in lines.Skip(1)) // ヘッダーをスキップ
{
var values = line.Split(',');
dataTable.Rows.Add(int.Parse(values[0]), values[1]); // データを追加
}
// DataGridViewにデータをバインド
dataGridView1.DataSource = dataTable;
}
このコードでは、指定したCSVファイルを読み込み、各行をDataTable
に追加しています。
最後に、DataSource
プロパティにDataTable
を設定することで、DataGridViewにデータが表示されます。
これにより、外部データソースからのデータインポートが可能になります。
まとめ
この記事では、C#のWindowsフォームアプリケーションにおけるDataGridViewの基本的な使い方から、データのバインド、操作、カスタマイズ、イベント処理、応用例まで幅広く解説しました。
DataGridViewを活用することで、ユーザーインターフェースにおけるデータ表示や操作がより効率的に行えるようになります。
これを機に、実際のプロジェクトでDataGridViewを活用し、よりインタラクティブで使いやすいアプリケーションを作成してみてください。