[C#] DataGridViewでのデータ表示方法

C#のDataGridViewは、Windows Formsアプリケーションでデータを表形式で表示するためのコントロールです。

データを表示するには、まずDataGridViewをフォームに追加し、データソースを設定します。

データソースには、データベースから取得したデータを格納したDataTableや、オブジェクトのリスト(List<T>)などを使用できます。

DataSourceプロパティにこれらのデータをバインドすることで、DataGridViewにデータが表示されます。

また、列の自動生成を有効にすることで、データソースに基づいて自動的に列が作成されます。

カスタム列を追加したり、セルのスタイルを変更することも可能です。

この記事でわかること
  • 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を使用してカスタム列を作成し、HeaderTextNameを設定しています。

最後に、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にデータが表示されます。

これにより、外部データソースからのデータインポートが可能になります。

よくある質問

DataGridViewでデータが表示されないのはなぜ?

DataGridViewにデータが表示されない場合、以下の点を確認してください。

  • データソースが正しく設定されているか: DataSourceプロパティに正しいデータソースが設定されているか確認します。
  • データソースが空でないか: データソースが空である場合、DataGridViewには何も表示されません。

データが正しく追加されているか確認します。

  • AutoGenerateColumnsプロパティ: AutoGenerateColumnsプロパティがtrueに設定されているか確認します。

これにより、データソースに基づいて列が自動生成されます。

  • データバインディングのタイミング: フォームの初期化が完了する前にデータをバインドしている場合、表示されないことがあります。

InitializeComponentの後にデータバインドを行うようにします。

DataGridViewのパフォーマンスを向上させる方法は?

DataGridViewのパフォーマンスを向上させるための方法は以下の通りです。

  • VirtualModeを使用する: 大量のデータを扱う場合、VirtualModeを有効にすることで、必要なデータのみを表示し、パフォーマンスを向上させることができます。
  • データの遅延読み込み: 一度に全てのデータを読み込むのではなく、必要なデータのみを読み込むようにします。
  • 行の描画を最適化: RowPrePaintRowPostPaintイベントを使用して、行の描画をカスタマイズし、パフォーマンスを向上させることができます。
  • データのバインドを最小限に: データの変更があった場合のみ、DataGridViewを再バインドするようにします。

頻繁に再バインドするとパフォーマンスが低下します。

DataGridViewでカスタムセルを作成するにはどうすればよいですか?

DataGridViewでカスタムセルを作成するには、以下の手順を実行します。

  1. カスタムセルクラスを作成: DataGridViewCellを継承したクラスを作成します。

このクラスでセルの描画や編集のロジックを定義します。

  1. カスタム列クラスを作成: DataGridViewColumnを継承したクラスを作成し、先ほど作成したカスタムセルクラスを使用します。
  2. カスタムセルをDataGridViewに追加: 作成したカスタム列をDataGridViewに追加します。

これにより、カスタムセルが表示されます。

以下は、カスタムセルを作成するための基本的なコードの例です。

public class MyCustomCell : DataGridViewTextBoxCell
{
    protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds,
        int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue,
        DataGridViewCellStyle style, DataGridViewAdvancedBorderStyle advancedBorderStyle,
        DataGridViewPaintParts paintParts)
    {
        // カスタム描画ロジックをここに記述
        base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, style, advancedBorderStyle, paintParts);
    }
}
public class MyCustomColumn : DataGridViewTextBoxColumn
{
    public MyCustomColumn()
    {
        this.CellTemplate = new MyCustomCell(); // カスタムセルを設定
    }
}

このようにしてカスタムセルを作成することで、DataGridViewの表示や動作を柔軟にカスタマイズできます。

まとめ

この記事では、C#のWindowsフォームアプリケーションにおけるDataGridViewの基本的な使い方から、データのバインド、操作、カスタマイズ、イベント処理、応用例まで幅広く解説しました。

DataGridViewを活用することで、ユーザーインターフェースにおけるデータ表示や操作がより効率的に行えるようになります。

これを機に、実際のプロジェクトでDataGridViewを活用し、よりインタラクティブで使いやすいアプリケーションを作成してみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • URLをコピーしました!
目次から探す