DataGridにデータを並び替えて表示したり、表示するデータを絞り込んだりするにはDataViewを利用します。
以下のサンプルでDataViewの使い方を確認してみましょう。
-------------------------------------------------------
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
class WinSample : Form
{
DataGrid dg;
DataSet ds;
DataView dv;
public static void Main()
{
Application.Run(new WinSample());
}
public WinSample()
{
this.SuspendLayout();
dg = new DataGrid();
dg.Anchor = AnchorStyles.Top|AnchorStyles.Bottom|AnchorStyles.Left|AnchorStyles.Right;
dg.Location = new Point(10, 10);
dg.Size = new Size(275, 100);
this.Controls.Add(dg);
ds = new DataSet();
this.Text = "DataGrid Sample";
this.Size = new Size(300, 200);
Button mybutton = new Button();
mybutton.Anchor = AnchorStyles.Bottom|AnchorStyles.Right;
mybutton.Location = new Point(200, 130);
mybutton.Text = "絞込み";
mybutton.Click += new EventHandler(this.mb_Click);
this.Controls.Add(mybutton);
this.ResumeLayout();
}
protected override void OnLoad(EventArgs e)
{
ds.ReadXml("testdata1.xml");
// DataViewを利用してソート
dv = new DataView(ds.Tables[0]);
dv.Sort = "id DESC";
dg.DataSource = dv;
}
private void mb_Click(object sender, EventArgs e)
{
// DataViewを利用して絞り込む
dv.RowFilter = "id = '1'";
}
}
-------------------------------------------------------
実はDataTableにはDefaultViewというプロパティがあり、これはDataViewそのものです。
このためDataViewオブジェクトを生成せず、以下のようにDefaultViewを直接利用することも可能です。
-------------------------------------------------------
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
class WinSample : Form
{
DataGrid dg;
DataSet ds;
public static void Main()
{
Application.Run(new WinSample());
}
public WinSample()
{
this.SuspendLayout();
dg = new DataGrid();
dg.Anchor = AnchorStyles.Top|AnchorStyles.Bottom|AnchorStyles.Left|AnchorStyles.Right;
dg.Location = new Point(10, 10);
dg.Size = new Size(275, 100);
this.Controls.Add(dg);
ds = new DataSet();
this.Text = "DataGrid Sample";
this.Size = new Size(300, 200);
Button mybutton = new Button();
mybutton.Anchor = AnchorStyles.Bottom|AnchorStyles.Right;
mybutton.Location = new Point(200, 130);
mybutton.Text = "絞込み";
mybutton.Click += new EventHandler(this.mb_Click);
this.Controls.Add(mybutton);
this.ResumeLayout();
}
protected override void OnLoad(EventArgs e)
{
ds.ReadXml("testdata1.xml");
// DataTableのDefaultViewを利用してソート
ds.Tables[0].DefaultView.Sort = "id DESC";
dg.DataSource = ds.Tables[0];
}
private void mb_Click(object sender, EventArgs e)
{
// DataTableのDefaultViewを利用して絞り込む
ds.Tables[0].DefaultView.RowFilter = "id = '1'";
}
}
-------------------------------------------------------
どちらの場合も同じ動作になっていることが確認できると思います。
あおい情報システム株式会社 小野修司(どっとねっとふぁん)