六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 38|回复: 0

C#客户端绑定DataView和DataTable的几个技巧

[复制链接]

升级  85%

884

主题

884

主题

884

主题

探花

Rank: 6Rank: 6

积分
2700
 楼主| 发表于 2013-1-26 14:19:06 | 显示全部楼层 |阅读模式
这几个问题算不上高级技巧,但是的确还有很多人不知道,尤其是对DataView了解比较少,下面代码演示了如何绑定数据到combobx和datagridview,另外还包括了如何在绑定时过滤重复,设置联动,以及如何利用DataRelation求汇总表格。程序界面请读者自己生成,一个form,两个combobox,三个datagridview就可以了。
参考界面如下

程序代码如下
<div style="padding: 4px 5.4pt; width: 95%;">usingSystem;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Windows.Forms;

namespaceWindowsApplication6
...{
publicpartialclassForm1:Form
...{
publicForm1()
...{
InitializeComponent();
initData();
}


System.Data.DataTabledt
=newDataTable();
System.Data.DataSetds
=newDataSet();

/**////<summary>
///初始化数据
///</summary>
privatevoidinitData()
...{
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);
}


privatevoidaddData(DataTabledt,stringName,stringCatalog,intSalary)
...{
System.Data.DataRowdrow
=dt.NewRow();
drow[
"ID"]=Name;
drow[
"板块"]=Catalog;
drow[
"积分"]=Salary;
dt.Rows.Add(drow);
}



privatevoidForm1_Load(objectsender,EventArgse)
...{

//绑定所有ID到comboBox1
this.comboBox1.DataSource=dt.DefaultView.ToTable(true,newstring[]...{"ID"});
this.comboBox1.DisplayMember="ID";

//绑定所有板块到comboBox2
this.comboBox2.DataSource=newDataView(dt);
this.comboBox2.DisplayMember="板块";

//设置两个联动刷新
this.comboBox1.SelectedIndexChanged+=newEventHandler(comboBox1_SelectedIndexChanged);

//绑定所有数据到dataGridView1
this.dataGridView1.DataSource=dt;

//绑定所有数据到dataGridView2
this.dataGridView2.DataSource=newDataView(dt);

//利用DataRelation求汇总表格
System.Data.DataTabledtGroup1=dt.DefaultView.ToTable(true,"ID");
dtGroup1.TableName
="Table2";
ds.Tables.Add(dtGroup1);
System.Data.DataRelationdr
=newDataRelation("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;

}


voidcomboBox1_SelectedIndexChanged(objectsender,EventArgse)
...{
//设置combobox2和comboBox1同步
System.Data.DataViewdv=this.comboBox2.DataSourceasDataView;
dv.RowFilter
=string.Format("ID='{0}'",this.comboBox1.Text);
//设置dataGridView2和comboBox1同步
dv=this.dataGridView2.DataSourceasDataView;
dv.RowFilter
=string.Format("ID='{0}'",this.comboBox1.Text);

}

}

}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表