更新日: 2004 年 6 月 30 日

このコンテンツのポイント
  • DataTable と EditBox のバインド
  • Currency Manager を使った DataTable 上でのカーソルコントロール
  • Currency Manager を使った DataTable 上でのカーソル情報の取得
今回紹介するコード
C#
private CurrencyManager myCM;

private void Form1_Load(object sender, System.EventArgs e)
{
    sqlDataAdapter1.Fill(myDataSet1);
    textBox1.DataBindings.Add("Text", myDataSet1.Tables[0], "CompanyName");
    myCM = (CurrencyManager)this.BindingContext[myDataSet1.Tables[0]];
}

private void First_Click(object sender, System.EventArgs e)
{
    myCM.Position = 0;
}

private void Previous_Click(object sender, System.EventArgs e)
{
    if ( myCM.Position > 0 )
	myCM.Position -= 1;
}

private void Forward_Click(object sender, System.EventArgs e)
{
    if(myCM.Position < myCM.Count - 1)
        myCM.Position += 1;
}

private void Last_Click(object sender, System.EventArgs e)
{
        myCM.Position = myCM.Count - 1;
}
 

目次
はじめに
作成するアプリケーションの概要
Windows フォームアプリケーションの準備
動作と解説
おわりに

Visual Basic .NET の内容はこちらに掲載しています。
10 行でズバリ !! カーソルコントロール (VB.NET)


はじめに

ADO.NET を使ったデータアクセスの手法はさまざまです。DataReader を使ったデータアクセスでは、DataReader を Forward Only / Read Only のカーソルとして使うことができます。では、DataTable 上でカーソルを使うにはどうしたらよいでしょう?
この場合、CurrecyManager オブジェクトを使用することで、TextBox などコントロールに紐付けられた DataTable 上のカーソルをコントロールすることができます。本ドキュメントでは、CurrecyManager を使ったカーソルのコントロールとカーソル情報の取得方法についてサンプルアプリケーションを通じて解説します。
なお本アプリケーションでは、SQL Server 2000 のサンプルデータベースである NorthWindow データベースの Customers テーブルを使用しますので、開発環境から該当のデータベースへアクセスできるようにしておきます。

 

作成するアプリケーションの概要

ここでは、データベースから情報を取得し、表示する Windows フォームアプリケーションを作成します。アプリケーション上では Button Control をつかって表示データをコントロールします。

 

Windows フォームアプリケーションの準備

Visual Studio .NET 2003 を起動して、以下の設定で新規にプロジェクトを作成します。

プロジェクトの種類 プロジェクトテンプレート プロジェクト名
[Visual C# プロジェクト] [Windowsアプリケーション] CursorControlSample

 

サーバーエクスプローラから、NorthWind データベースの Customers テーブルを Form に Drag & Drop します。これにより sqlConnection1, sqlDataAdapter1 の各インスタンスが作成されることを確認します。sqlDataAdapter1 を選択し、「データ」メニューから「データセットの生成」を選択します。ここでは追加テーブル欄に Customers テーブルが含まれていることを確認し、「myDataSet」を新規作成します。myDataSet1 インスタンスが作成されていることを確認します。

ツールボックスから TextBox Control, Button Control をフォームに配置し、以下のようにボタンコントロールのプロパティを設定します。

コントロール コントロール ID プロパティ名 設定値
Button Forward Text ">"
Button Previous Text "<"
Button Top Text "<<"
Button Last Text ">>"

 



図 1. WinForm アプリケーション

 

コントロール配置後、コードを実装します。
フォームをダブルクリックし、Form_Load メソッドの直前とメソッドの中に以下のコードを実装します。

C#
private CurrencyManager myCM;

private void Form1_Load(object sender, System.EventArgs e)
{
    sqlDataAdapter1.Fill(myDataSet1);
    textBox1.DataBindings.Add("Text", myDataSet1.Tables[0], "CompanyName");
    myCM = (CurrencyManager)this.BindingContext[myDataSet1.Tables[0]];
}
 

「<<」「<」「>」「>>」 のボタンをダブルクリックし、以下のコードを実装します。

C#
private void First_Click(object sender, System.EventArgs e)
{
    myCM.Position = 0;
}

private void Previous_Click(object sender, System.EventArgs e)
{
    if ( myCM.Position > 0 )
	myCM.Position -= 1;
}

private void Forward_Click(object sender, System.EventArgs e)
{
    if(myCM.Position < myCM.Count - 1)
        myCM.Position += 1;
}

private void Last_Click(object sender, System.EventArgs e)
{
        myCM.Position = myCM.Count - 1;
}
 

動作と解説

アプリケーションを実行すると、テキストボックスに名前が入って表示されます。



図 2. アプリケーション

 

これは、Form1_Load で実装した、SqlDataAdapter.Fill メソッドにより、myDataSet1 インスタンスに Customers テーブルのデータが格納され、TextBox の Bind プロパティにより、myDataSet1 の中の Customers テーブルの CompanyName カラムが TextBox に紐付けられるためです。



図 3. データ連結

 

さて、Form 中で DataTable のカーソルコントロールのための CurrencyManager を Customers テーブルに関連付けています。これで、DataTable のカーソルをコントロールする準備ができました。

実際に「<」「>」を押してみると、表示されるデータが変わります。これはボタンを押すことで DataTable のカーソルを移動させているためです。カーソルを移動させるには、CurrencyManager コントロールの Position プロパティを変更します。+1 で次の行、-1 で前の行となります。Position プロパティを変更すると、PositionChage のイベントが自動起動し自動的に TextBox の表示が切り替えられます。ですから、表示修正のコードは記述する必要はありません。


図 4. カーソル移動

 

CurrencyManager でよく使うデータとしては、最終行であり、テーブルの行数である、Count プロパティ があります。Count プロパティを使うとデータ数がわかるため、最終行の位置の取得が可能になります。ただし Position プロパティは 0 から始まる情報のため、Count プロパティと比較する際には注意が必要です。10 個のデータが格納されている場合 Position は 0 ~ 9 ですが、Count は 10 になります。

たとえば、現在のポジションをタイトルバーに表示するには、Position 変更後、以下コードを実行すると「1/99」のように表示されます。

C#
this.Text = (myCM.Position + 1).ToString() + " / " + myCM.Count.ToString();
 

おわりに

CurrencyManager を使うと簡単な実装で、データコントロールをするための機能が実装することができます。スマートクライアントのように、ローカルにデータを持ち必要に応じて表示するアプリケーションを実装する際には大変有効な手段です。CurrencyManager は .NET Compact Framework でも使用できるので、PocketPC を使ったスマートクライアント アプリケーション を実装する際には一度試してみるとよいでしょう。


Code Recipe

ページのトップへ