LoginSignup
23
26

DataGridViewとデータバインド

Last updated at Posted at 2017-12-09

データバインドとは

DataGridViewとデータを紐づけることをデータバインドという。
データバインドすることで、DataGridViewの操作に伴うデータ変更、データ変更に伴うDataGridViewの表示更新に関してのコードを実装する必要がなくなる。
つまり、DataGridViewのセルの値を変更すればデータも自動で変更される。データを変更すればDataGridViewのセル値も自動で変更されることになる。

バインドするデータクラスの作成

DataGridViewにバインドするデータクラスを作成する。
今回は、ToDoアプリを想定し、ToDoを管理するItemクラスを作成した。

Item.cs
    public class Item
    {
        public bool Done { get; set; }

        public string Name { get; set; }

        public string Detail { get; set; }
    }

ビルド

ここで一度ビルドする。
作成したItemクラスをVisualStudioに認識させる。

BindingSourceの作成

「DataGridView - BindingSource - データ」の構成とし、BindingSourceを介してDataGridViewとデータ(Itemクラス)を紐づける。

  1. DataGridView コントロールの右上隅のスマート タグ グリフ (スマート タグ グリフ) をクリックします。
  2. [データ ソースの選択] オプションのドロップダウン矢印をクリックします。
  3. プロジェクトのデータ ソースがまだない場合は、[プロジェクト データ ソースの追加] をクリックし、ウィザードに示された手順に従います。

datasource.PNG

dataobject.PNG

※上図でItemクラスが表示されない場合、ビルドを忘れている。

BidingSouceを作成することで、Itemクラスのプロパティが、DataGridViewの列に追加される。(下図参照)

datagridview2.PNG

双方向データバインド

BidingSouceのDataSourceにItemインスタンスを設定する。
双方向データバインド(UI → データ、データ → UI)を実現するために、リストはBindingListを使う。
※ただのListだと、片方向データバインド(UI → データ)になる。

Form1.cs
    public partial class Form1 : Form
    {
        private BindingList<Item> _tasks;

        public Form1()
        {
            InitializeComponent();

            _tasks = new BindingList<Item>();

            Item taskItem = new Item() { Done = true, Name = "a", Detail = "aaaaaaaaaa" };
            _tasks.Add(taskItem);

            itemBindingSource.DataSource = _tasks;
        }
    }

DataGridViewで行を追加すると、自動的に_tasksが更新される。
また、コードで_tasksにItemを追加すると、自動的にDataGridViewの表示が更新される。

datagridview3.PNG

参考

23
26
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
26