日期:2014-05-19  浏览次数:21227 次

DataGridView能否绑定2个DataTable
我用2个DataTable能否绑定到一个DataGridView里。比如
2个DataTable  
A       B                           A       C
1       www                       1       aaa
2       zzz                       2       bbb
3       yyy                       3       ccc
希望绑定后DataGridView显示如下:
A       B       C
1     www   aaa
2     zzz   bbb
3     yyy   ccc

------解决方案--------------------
可以对两个table合并,设置两个Table的主建列,再通过DataSet的merge方法合并两个Table,前提是两个table中记录是一对一的关系,不然合并的结果会不正常
------解决方案--------------------
可以的,用关系

  所谓嵌套模板就是在一个模板中加入另一个模板,如

1 <asp:Repeater ID= "parent " Runat= "server ">
2 <ItemTemplate>
3 编号: <%# DataBinder.Eval(Container.DataItem, "id ")%>
4 留言: <%# DataBinder.Eval(Container.DataItem, "content ")%>
5 <br>
6 <asp:Repeater ID= "child " Runat= "server "> <!--此处亦可使用DataList-->
7 <ItemTemplate>
8 回复: <%# DataBinder.Eval(Container.DataItem, "reply ")%> <br>
9 </ItemTemplate>
10 </asp:Repeater>
11 </ItemTemplate>
12 </asp:Repeater>

在后置代码Load中写入(假设父模板为parent,子模板为child)

OleDbConnection con = new OleDbConnection(@ "../gb.mdb ");
OleDbDataAdapter da = new OleDbDataAdapter( "select * from guestbook ",con);
OleDbDataAdapter da2 = new OleDbDataAdapter( "select * from reply ",con);

DataSet ds = new DataSet();
da.Fill(ds, "guestbook ");
da2.Fill(ds, "reply ");

ds.Relations.Add( "relation ",ds.Tables[0].Columns[ "id "],ds.Tables[1].Columns[ "id "]);

parent.DataSource = ds.Tables[0].DefaultView;
parent.DataBind();

con.Close();

主要是为两个表之间添加关系,当前如果一个表就什么都不用做了.

接着写Repeater的 ItemDataBound 事件,这个很关键.

DataRowView dv = e.Item.DataItem as DataRowView;

child = e.Item.FindControl( "child ") as Repeater;
child.DataSource = dv.CreateChildView( "relation ");
child.DataBind();

通过FindControl()来查找子模板并赋数据源.

上面的思路其实可以理解为两个表间的父子关系映射到嵌套模板上去.

DataGrid也一样。