DataSource for Entity Framework for WinForms
WinForms での LiveLinq 実装
C1LiveLinq > LiveLinq の開始 > 階層的 LiveLinq 連結 > WinForms での LiveLinq 実装

前のセクションでは、従来のデータ連結アプリケーションを LiveLinq 連結に移行する方法について説明しました。結果のアプリケーションでは、設計時に Visual Studio によって生成された BindingSource オブジェクトとコードを使用しました。

新しい LiveLinq アプリケーションを最初から作成する場合は、さらに簡単です。

手順は次のとおりです。

  1. 新しい WinForms アプリケーションを作成します。
  2. [データ]→[新しいデータソースの追加]メニューを使用して、NORTHWND.MDF データベースへの参照を追加します。ウィザードに表示されるデフォルトのオプションをすべて受け入れ、さらにデータベース内のテーブルをすべて選択します。
  3. 前と同様に、フォームにコントロール(1つの ComboBox、1つの DataGridView、4つの TextBox コントロール、いくつかの Label コントロール)を追加します。
  4. プロジェクトに C1.LiveLinq.dll アセンブリへの参照を追加します。
  5. フォームをダブルクリックし、次のコードを追加します。
C#
コードのコピー
using C1.LiveLinq;
using C1.LiveLinq.AdoNet;
using C1.LiveLinq.LiveViews;
private void Form1_Load(object sender, EventArgs e)
{
  // データを取得します
  var ds = GetData();
  // Categories および Products を使用してライブビューを作成します
  var liveView =
    from c in ds.Categories.AsLive()
    join p in ds.Products.AsLive()
      on c.CategoryID equals p.CategoryID into g
    select new
    {
      c.CategoryID,
      c.CategoryName,
      Products = g
    };
  // ビューをコントロールに連結します
  DataBind(liveView);
}

このコードは単純です。GetData メソッドを呼び出して DataSet にデータをロードし、前に使用した LINQ ステートメントと同じステートメントを使用して LiveLinq ビューを作成します。次に、DataBind を呼び出して、フォーム内のコントロールをビューに連結します。

次に、GetData メソッドの実装を示します。

C#
コードのコピー
NORTHWNDDataSet GetData()
{
  NORTHWNDDataSet ds = new NORTHWNDDataSet();
  new NORTHWNDDataSetTableAdapters.ProductsTableAdapter()
    .Fill(ds.Products);
  new NORTHWNDDataSetTableAdapters.CategoriesTableAdapter()
    .Fill(ds.Categories);
  return ds;
}

GetData は、NORTHWNDDataSet を作成し、設計時に Visual Studio によって作成されたアダプタを使用して "Products" および "Categories" テーブルにデータを挿入し、データセットを返します。

次に、DataBind メソッドの実装を示します。

C#
コードのコピー
void DataBind(object dataSource)
{
  // ComboBox を連結します
  comboBox1.DataSource = dataSource;
  comboBox1.DisplayMember = "CategoryName";
  comboBox1.ValueMember = "CategoryID";
  // DataGridView を連結します
  dataGridView1.DataMember = "Products";
  dataGridView1.DataSource = dataSource;
  // TextBox コントロールを連結します
  BindTextBox(textBox1, dataSource, "ProductName");
  BindTextBox(textBox2, dataSource, "UnitPrice");
  BindTextBox(textBox3, dataSource, "QuantityPerUnit");
  BindTextBox(textBox4, dataSource, "UnitsInStock");
}
void BindTextBox(TextBox txt, object dataSource, string dataMember)
{
    var b = new Binding("Text", dataSource, "Products." + dataMember);
    txt.DataBindings.Add(b);
}

DataBind は、各コントロールのデータ連結プロパティを設定して、それらのコントロールを LiveLinq ビューに連結します。これは、プロパティウィンドウエディタを使用して以前に行ったこととまったく同じですが、今回はすべてをコードで行い、BindingSource コンポーネントを介さずに、コントロールを LiveLinq ビューに直接連結しています。

ここでプロジェクトを実行すると、前回とまったく同様に機能することがわかります。

通常、自分でデータ連結コードを記述すると、設計時エディタを使用し、Visual Studio によって自動的にコードを記述するより多少時間がかかります。一方、結果のコードはシンプルになり、管理も簡単で、他のプラットフォームへの移植も容易になります(次のセクションを参照)。

どちらの方法でも、フォーム内のコントロールの連結ソースとして LiveLinq ビューを使用できます。