[C#] DataGridViewでの値設定方法

C#のDataGridViewで値を設定する方法は、主に以下の手順で行います。

まず、DataGridViewにデータソースを設定している場合、データソース自体を更新することで値を変更します。

例えば、DataTableをデータソースとしている場合、DataTableの特定のセルの値を変更します。

データソースを使用していない場合、DataGridViewのセルに直接アクセスして値を設定できます。

具体的には、dataGridView.Rows[rowIndex].Cells[columnIndex].Valueプロパティを使用して、特定のセルの値を設定します。

これにより、DataGridViewの表示が更新されます。

この記事でわかること
  • DataGridViewのセルに値を設定する方法
  • セルの編集やイベントの活用法
  • DataGridViewのカスタマイズ手法
  • コンボボックスやチェックボックスの使用
  • カスタムセルの作成方法

目次から探す

DataGridViewでの値設定方法

セルの値を直接設定する方法

DataGridViewの特定のセルに直接値を設定する方法は非常にシンプルです。

以下のサンプルコードでは、DataGridViewの特定のセルに値を設定する方法を示します。

partial class MyForm : Form
{
    private DataGridView dataGridView;
    public MyForm()
    {
        InitializeComponent();
        InitializeDataGridView();
    }
    private void InitializeDataGridView()
    {
        dataGridView = new DataGridView();
        dataGridView.Columns.Add("Column1", "列1");
        dataGridView.Columns.Add("Column2", "列2");
        dataGridView.Rows.Add("初期値1", "初期値2");
        // セルの値を直接設定
        dataGridView.Rows[0].Cells[0].Value = "新しい値1"; // 1行目の1列目
        dataGridView.Rows[0].Cells[1].Value = "新しい値2"; // 1行目の2列目
        this.Controls.Add(dataGridView);
    }
}

このコードでは、DataGridViewの1行目の1列目と2列目に新しい値を設定しています。

Valueプロパティを使用することで、簡単にセルの値を変更できます。

データソースを使用した値の設定

データソースを使用してDataGridViewにデータをバインドすることも可能です。

以下のサンプルコードでは、DataTableをデータソースとして使用し、DataGridViewにデータを表示します。

partial class MyForm : Form
{
    private DataGridView dataGridView;
    private DataTable dataTable;
    public MyForm()
    {
        InitializeComponent();
        InitializeDataGridView();
    }
    private void InitializeDataGridView()
    {
        dataGridView = new DataGridView();
        dataTable = new DataTable();
        // DataTableに列を追加
        dataTable.Columns.Add("列1", typeof(string));
        dataTable.Columns.Add("列2", typeof(string));
        // DataTableに行を追加
        dataTable.Rows.Add("値1", "値2");
        dataTable.Rows.Add("値3", "値4");
        // DataGridViewにデータソースを設定
        dataGridView.DataSource = dataTable;
        this.Controls.Add(dataGridView);
    }
}

このコードでは、DataTableにデータを追加し、それをDataGridViewにバインドしています。

データソースを使用することで、データの管理が容易になります。

バインディングソースを利用した値の設定

バインディングソースを使用すると、データのバインディングがさらに簡単になります。

以下のサンプルコードでは、BindingSourceを使用してDataGridViewにデータをバインドします。

partial class MyForm : Form
{
    private DataGridView dataGridView;
    private BindingSource bindingSource;
    private List<MyData> dataList;
    public MyForm()
    {
        InitializeComponent();
        InitializeDataGridView();
    }
    private void InitializeDataGridView()
    {
        dataGridView = new DataGridView();
        bindingSource = new BindingSource();
        dataList = new List<MyData>();
        // データを追加
        dataList.Add(new MyData { Column1 = "データ1", Column2 = "データ2" });
        dataList.Add(new MyData { Column1 = "データ3", Column2 = "データ4" });
        // BindingSourceにデータを設定
        bindingSource.DataSource = dataList;
        // DataGridViewにBindingSourceを設定
        dataGridView.DataSource = bindingSource;
        this.Controls.Add(dataGridView);
    }
}
public class MyData
{
    public string Column1 { get; set; }
    public string Column2 { get; set; }
}

このコードでは、MyDataクラスを使用してデータを管理し、BindingSourceを介してDataGridViewにバインドしています。

これにより、データの変更が自動的にDataGridViewに反映されます。

セルの編集とイベント

セルの編集を有効にする

DataGridViewのセルを編集可能にするためには、ReadOnlyプロパティを設定する必要があります。

以下のサンプルコードでは、DataGridViewのセルを編集可能に設定しています。

partial class MyForm : Form
{
    private DataGridView dataGridView;
    public MyForm()
    {
        InitializeComponent();
        InitializeDataGridView();
    }
    private void InitializeDataGridView()
    {
        dataGridView = new DataGridView();
        dataGridView.Columns.Add("Column1", "列1");
        dataGridView.Columns.Add("Column2", "列2");
        dataGridView.Rows.Add("初期値1", "初期値2");
        // セルの編集を有効にする
        dataGridView.ReadOnly = false; // DataGridView全体を編集可能に設定
        this.Controls.Add(dataGridView);
    }
}

このコードでは、ReadOnlyプロパティをfalseに設定することで、DataGridView全体のセルを編集可能にしています。

特定の列や行だけを編集可能にしたい場合は、各セルのReadOnlyプロパティを個別に設定することもできます。

セルの編集イベントの活用

セルの編集に関連するイベントを活用することで、ユーザーがセルを編集した際の処理をカスタマイズできます。

以下のサンプルコードでは、セルの編集開始時と終了時のイベントを処理しています。

partial class MyForm : Form
{
    private DataGridView dataGridView;
    public MyForm()
    {
        InitializeComponent();
        InitializeDataGridView();
    }
    private void InitializeDataGridView()
    {
        dataGridView = new DataGridView();
        dataGridView.Columns.Add("Column1", "列1");
        dataGridView.Columns.Add("Column2", "列2");
        dataGridView.Rows.Add("初期値1", "初期値2");
        // セルの編集イベントを登録
        dataGridView.CellBeginEdit += DataGridView_CellBeginEdit;
        dataGridView.CellEndEdit += DataGridView_CellEndEdit;
        this.Controls.Add(dataGridView);
    }
    private void DataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
    {
        // セルの編集開始時の処理
        MessageBox.Show("セルの編集を開始しました。");
    }
    private void DataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        // セルの編集終了時の処理
        MessageBox.Show("セルの編集が終了しました。");
    }
}

このコードでは、CellBeginEditイベントとCellEndEditイベントを使用して、セルの編集開始時と終了時にメッセージボックスを表示しています。

これにより、ユーザーに対してフィードバックを提供できます。

セルの値変更時のイベント処理

セルの値が変更された際に特定の処理を行いたい場合は、CellValueChangedイベントを使用します。

以下のサンプルコードでは、セルの値が変更されたときにメッセージボックスを表示します。

partial class MyForm : Form
{
    private DataGridView dataGridView;
    public MyForm()
    {
        InitializeComponent();
        InitializeDataGridView();
    }
    private void InitializeDataGridView()
    {
        dataGridView = new DataGridView();
        dataGridView.Columns.Add("Column1", "列1");
        dataGridView.Columns.Add("Column2", "列2");
        dataGridView.Rows.Add("初期値1", "初期値2");
        // セルの値変更時のイベントを登録
        dataGridView.CellValueChanged += DataGridView_CellValueChanged;
        dataGridView.CurrentCellDirtyStateChanged += DataGridView_CurrentCellDirtyStateChanged;
        this.Controls.Add(dataGridView);
    }
    private void DataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
    {
        // セルが変更された場合、即座に値変更イベントを発生させる
        if (dataGridView.IsCurrentCellDirty)
        {
            dataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
        }
    }
    private void DataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        // セルの値が変更されたときの処理
        MessageBox.Show("セルの値が変更されました。");
    }
}

このコードでは、CellValueChangedイベントを使用して、セルの値が変更された際にメッセージボックスを表示しています。

また、CurrentCellDirtyStateChangedイベントを使用して、セルが変更された際に即座に値変更イベントを発生させるようにしています。

これにより、ユーザーがセルを編集した直後に反応することができます。

DataGridViewのカスタマイズ

セルのスタイル設定

DataGridViewのセルのスタイルを設定することで、見た目をカスタマイズできます。

以下のサンプルコードでは、特定のセルの背景色やフォントスタイルを変更しています。

partial class MyForm : Form
{
    private DataGridView dataGridView;
    public MyForm()
    {
        InitializeComponent();
        InitializeDataGridView();
    }
    private void InitializeDataGridView()
    {
        dataGridView = new DataGridView();
        dataGridView.Columns.Add("Column1", "列1");
        dataGridView.Columns.Add("Column2", "列2");
        dataGridView.Rows.Add("値1", "値2");
        // セルのスタイル設定
        dataGridView.Rows[0].Cells[0].Style.BackColor = Color.LightBlue; // 1行目の1列目の背景色
        dataGridView.Rows[0].Cells[1].Style.Font = new Font("Arial", 12, FontStyle.Bold); // 1行目の2列目のフォントスタイル
        this.Controls.Add(dataGridView);
    }
}

このコードでは、1行目の1列目のセルの背景色を水色に、2列目のセルのフォントを太字のArialに設定しています。

これにより、特定のセルを目立たせることができます。

列の幅と行の高さの調整

DataGridViewの列の幅や行の高さを調整することで、表示を最適化できます。

以下のサンプルコードでは、列の幅と行の高さを設定しています。

partial class MyForm : Form
{
    private DataGridView dataGridView;
    public MyForm()
    {
        InitializeComponent();
        InitializeDataGridView();
    }
    private void InitializeDataGridView()
    {
        dataGridView = new DataGridView();
        dataGridView.Columns.Add("Column1", "列1");
        dataGridView.Columns.Add("Column2", "列2");
        dataGridView.Rows.Add("値1", "値2");
        // 列の幅を設定
        dataGridView.Columns[0].Width = 150; // 1列目の幅を150ピクセルに設定
        dataGridView.Columns[1].Width = 200; // 2列目の幅を200ピクセルに設定
        // 行の高さを設定
        dataGridView.RowTemplate.Height = 40; // 行の高さを40ピクセルに設定
        this.Controls.Add(dataGridView);
    }
}

このコードでは、1列目の幅を150ピクセル、2列目の幅を200ピクセルに設定し、行の高さを40ピクセルに調整しています。

これにより、データが見やすくなります。

セルのフォーマット設定

DataGridViewのセルに表示するデータのフォーマットを設定することで、数値や日付などの表示をカスタマイズできます。

以下のサンプルコードでは、数値のフォーマットを設定しています。

partial class MyForm : Form
{
    private DataGridView dataGridView;
    public MyForm()
    {
        InitializeComponent();
        InitializeDataGridView();
    }
    private void InitializeDataGridView()
    {
        dataGridView = new DataGridView();
        dataGridView.Columns.Add("Column1", "列1");
        dataGridView.Columns.Add("Column2", "列2");
        dataGridView.Rows.Add(1234.56, "値2"); // 数値を追加
        // セルのフォーマット設定
        dataGridView.Columns[0].DefaultCellStyle.Format = "C2"; // 1列目を通貨形式で表示
        this.Controls.Add(dataGridView);
    }
}

このコードでは、1列目のセルに数値を通貨形式で表示するように設定しています。

DefaultCellStyle.Formatプロパティを使用することで、数値の表示形式を簡単に変更できます。

これにより、データの意味がより明確になります。

応用例

コンボボックスセルの使用

DataGridViewにコンボボックスセルを追加することで、ユーザーが選択肢から値を選べるようにすることができます。

以下のサンプルコードでは、コンボボックスセルを使用して、特定の列に選択肢を提供しています。

partial class MyForm : Form
{
    private DataGridView dataGridView;
    public MyForm()
    {
        InitializeComponent();
        InitializeDataGridView();
    }
    private void InitializeDataGridView()
    {
        dataGridView = new DataGridView();
        dataGridView.Columns.Add("Column1", "選択肢");
        dataGridView.Columns.Add("Column2", "値");
        // コンボボックスセルを作成
        DataGridViewComboBoxColumn comboBoxColumn = new DataGridViewComboBoxColumn();
        comboBoxColumn.HeaderText = "選択肢";
        comboBoxColumn.Items.AddRange("オプション1", "オプション2", "オプション3"); // 選択肢を追加
        dataGridView.Columns[0] = comboBoxColumn; // コンボボックス列を設定
        dataGridView.Rows.Add(null, "値1"); // 行を追加
        this.Controls.Add(dataGridView);
    }
}

このコードでは、コンボボックスセルを作成し、3つの選択肢を追加しています。

ユーザーはこの列から選択肢を選ぶことができます。

チェックボックスセルの使用

DataGridViewにチェックボックスセルを追加することで、ユーザーが簡単に真偽値を選択できるようにすることができます。

以下のサンプルコードでは、チェックボックスセルを使用しています。

partial class MyForm : Form
{
    private DataGridView dataGridView;
    public MyForm()
    {
        InitializeComponent();
        InitializeDataGridView();
    }
    private void InitializeDataGridView()
    {
        dataGridView = new DataGridView();
        dataGridView.Columns.Add("Column1", "選択");
        dataGridView.Columns.Add("Column2", "値");
        // チェックボックスセルを作成
        DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn();
        checkBoxColumn.HeaderText = "選択";
        dataGridView.Columns[0] = checkBoxColumn; // チェックボックス列を設定
        dataGridView.Rows.Add(false, "値1"); // 行を追加
        dataGridView.Rows.Add(true, "値2"); // 行を追加
        this.Controls.Add(dataGridView);
    }
}

このコードでは、チェックボックスセルを作成し、2つの行を追加しています。

ユーザーはチェックボックスをクリックすることで、選択状態を変更できます。

カスタムセルの作成

DataGridViewでは、独自のカスタムセルを作成することも可能です。

以下のサンプルコードでは、カスタムセルを作成し、特定の機能を持たせています。

public class MyCustomCell : DataGridViewTextBoxCell
{
    protected override void Paint(Graphics graphics,
        Rectangle clipBounds,
        Rectangle cellBounds,
        int rowIndex,
        DataGridViewElementStates cellState,
        object value,
        object formattedValue,
        DataGridViewCellStyle cellStyle,
        DataGridViewAdvancedBorderStyle advancedBorderStyle,
        DataGridViewPaintParts paintParts)
    {
        // カスタム描画処理
        base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, cellStyle, advancedBorderStyle, paintParts);
        // セルの右下にカスタムマークを描画
        graphics.FillEllipse(Brushes.Red, cellBounds.Right - 10, cellBounds.Bottom - 10, 8, 8);
    }
}
partial class MyForm : Form
{
    private DataGridView dataGridView;
    public MyForm()
    {
        InitializeComponent();
        InitializeDataGridView();
    }
    private void InitializeDataGridView()
    {
        dataGridView = new DataGridView();
        dataGridView.Columns.Add(new DataGridViewColumn(new MyCustomCell()) { HeaderText = "カスタムセル" });
        dataGridView.Rows.Add("カスタム値"); // 行を追加
        this.Controls.Add(dataGridView);
    }
}

このコードでは、MyCustomCellクラスを作成し、セルの右下に赤い円を描画するカスタム描画処理を実装しています。

DataGridViewにこのカスタムセルを追加することで、独自の機能を持つセルを作成できます。

よくある質問

DataGridViewのセルに値を設定できないのはなぜ?

DataGridViewのセルに値を設定できない場合、以下のような原因が考えられます。

  • ReadOnlyプロパティ: DataGridViewまたは特定のセルがReadOnlyに設定されていると、値を変更できません。

ReadOnlyプロパティを確認し、必要に応じてfalseに設定してください。

  • データソースのバインディング: データソースにバインドされている場合、直接セルの値を変更することはできません。

データソースの値を変更する必要があります。

  • イベントの影響: セルの編集イベントで値の変更をキャンセルしている場合、値が設定できないことがあります。

イベントハンドラを確認してください。

データソースを変更しても表示が更新されないのはなぜ?

データソースを変更してもDataGridViewの表示が更新されない場合、以下の点を確認してください。

  • BindingSourceの使用: BindingSourceを使用している場合、データソースを変更した後にResetBindingsメソッドを呼び出す必要があります。

これにより、DataGridViewがデータの変更を認識します。

  • INotifyPropertyChangedインターフェース: データソースがINotifyPropertyChangedインターフェースを実装していない場合、変更が自動的に反映されません。

データクラスにこのインターフェースを実装することを検討してください。

  • DataGridViewの再バインド: データソースを変更した後、DataGridViewを再バインドすることも一つの方法です。

dataGridView.DataSource = null; dataGridView.DataSource = yourDataSource;のように設定します。

セルの編集を禁止する方法は?

DataGridViewのセルの編集を禁止する方法はいくつかあります。

以下の方法を試してください。

  • ReadOnlyプロパティ: DataGridView全体または特定の列やセルのReadOnlyプロパティをtrueに設定します。

これにより、編集が禁止されます。

  • CellBeginEditイベントのキャンセル: CellBeginEditイベントでe.Cancel = true;を設定することで、特定のセルの編集をキャンセルできます。
private void DataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
    e.Cancel = true; // 編集をキャンセル
}
  • DataGridViewのEnabledプロパティ: DataGridView全体を無効にする場合は、Enabledプロパティをfalseに設定します。

これにより、すべてのセルが編集不可になります。

まとめ

この記事では、C#のDataGridViewを使用してセルの値を設定する方法や、セルの編集、カスタマイズのテクニックについて詳しく解説しました。

また、コンボボックスやチェックボックスのセルを利用した応用例や、カスタムセルの作成方法も紹介しました。

これらの知識を活用することで、よりインタラクティブで使いやすいユーザーインターフェースを構築することが可能です。

ぜひ、実際のプロジェクトにこれらのテクニックを取り入れて、DataGridViewの機能を最大限に活用してみてください。

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

関連カテゴリーから探す

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