-
c#绑定DataView和DataTable的几个技巧
这几个问题算不上高级技巧,但是的确还有很多人不知道,尤其是对DataView了解比较少,下面代码演示了如何绑定数据到combobx和datagridview,另外还包括了如何在绑定时过滤重复,设置联动,以及如何利用DataRelation求汇总表格。程序界面请读者自己生成,一个form,两个combobox,三个datagridview就可以了。
参考界面如下
程序代码如下
using System;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;
namespace WindowsApplication6
...{
public partial class Form1 : Form
...{
public Form1()
...{
InitializeComponent();
initData();
}
System.Data.DataTable dt = new DataTable();
System.Data.DataSet ds = new DataSet();
/**//// <summary>
/// 初始化数据
/// </summary>
private void initData()
...{
dt.TableName = "Table1";
ds.Tables.Add(dt);
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("板块", typeof(string));
dt.Columns.Add("积分", typeof(int));
addData(dt, "jinjazz", "delphi", 50000);
addData(dt, "jinjazz", "Sqlserver", 10000);
addData(dt, "jinjazz", ".net", 20000);
addData(dt, "zjcxc", "Sqlserver", 900000);
addData(dt, "zjcxc", "vb", 10000);
addData(dt, "zswang", "delphi", 70000);
addData(dt, "zswang", ".net", 30000);
}
private void addData(DataTable dt, string Name, string Catalog, int Salary)
...{
System.Data.DataRow drow = dt.NewRow();
drow["ID"] = Name;
drow["板块"] = Catalog;
drow["积分"] = Salary;
dt.Rows.Add(drow);
}
private void Form1_Load(object sender, EventArgs e)
...{
//绑定所有ID到comboBox1
this.comboBox1.DataSource = dt.DefaultView.ToTable(true, new string[] ...{ "ID" });
this.comboBox1.DisplayMember = "ID";
//绑定所有板块到comboBox2
this.comboBox2.DataSource = new DataView(dt);
this.comboBox2.DisplayMember = "板块";
//设置两个联动刷新
this.comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
//绑定所有数据到dataGridView1
this.dataGridView1.DataSource = dt;
//绑定所有数据到dataGridView2
this.dataGridView2.DataSource = new DataView(dt);
//利用DataRelation求汇总表格
System.Data.DataTable dtGroup1=dt.DefaultView.ToTable(true,"ID");
dtGroup1.TableName = "Table2";
ds.Tables.Add(dtGroup1);
System.Data.DataRelation dr = new DataRelation("relation", dtGroup1.Columns["ID"], dt.Columns["ID"]);
ds.Relations.Add(dr);
dtGroup1.Columns.Add("总积分").Expression = "sum(child(relation).积分)";
dtGroup1.Columns.Add("板块数").Expression = "count(child(relation).板块)";
this.dataGridView3.DataSource = dtGroup1;
}
void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
...{
//设置combobox2和comboBox1同步
System.Data.DataView dv = this.comboBox2.DataSource as DataView;
dv.RowFilter = string.Format("ID='{0}'", this.comboBox1.Text);
//设置dataGridView2和comboBox1同步
dv = this.dataGridView2.DataSource as DataView;
dv.RowFilter = string.Format("ID='{0}'", this.comboBox1.Text);
}
}
}