/* 增加关系 */
//后台代码
SqlConnection cnn = new SqlConnection("server=(local);database=pubs;uid=sa;pwd=qinfei;");
SqlDataAdapter cmd1 = new SqlDataAdapter("select * from authors",cnn);
DataSet ds = new DataSet();
cmd1.Fill(ds,"authors");
SqlDataAdapter cmd2 = new SqlDataAdapter("select * from titleauthor",cnn);
cmd2.Fill(ds,"titles");
ds.Relations.Add("myrelation", ds.Tables["authors"].Columns["au_id"], ds.Tables["titles"].Columns["au_id"]);
parent.DataSource = ds.Tables["authors"];
Page.DataBind();
cnn.Close();
//页面代码
<!-- 父控件 -->
<asp:Repeater id="parent" runat="server">
<ItemTemplate>
<b> <%# DataBinder.Eval(Container.DataItem,"au_id") %></b> <br>
<!-- 子控件 --> <!-- 捆绑数据源,在后台已建立了myrelation 的关系 -->
<asp:Repeater id="child" datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>' runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "[\"title_id\"]")%> <br> <!-- 子控件捆绑数据后调用数据时,方法内的Row参数需加 [""] -->
</ItemTemplate>
</asp:Repeater>
<!-- 子控件 -->
</ItemTemplate>
</asp:Repeater>
<!-- 父控件 -->
/* 给子控件捆绑数据源 */
//后台代码
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
BindData();
}
//取得数据
private void BindData()
{
string sqlStmt = "SELECT * FROM Customers; SELECT * FROM Orders";
string conString = "server=localhost;database=Northwind;uid=sa;pwd=;";
SqlDataAdapter sda = new SqlDataAdapter(sqlStmt, conString);
sda.Fill(ds);
ds.Tables[0].TableName = "Customers";
ds.Tables[1].TableName = "Orders";
DataGrid1.DataSource = ds.Tables["Customers"];
DataGrid1.DataBind();
}
//取返回数的方法,前台页面子控件中可直接调用
protected DataView getOrdersDataSource(string _customerID)
{
DataView _orders = ds.Tables["Orders"].DefaultView;
_orders.RowFilter = "CustomerID='" + _customerID + "'";
return _orders;
}
//同上,不带参数
protected DataView getOrdersDataSource1()
{
DataView _orders = ds.Tables["Orders"].DefaultView;
_orders.RowFilter = "CustomerID='BSBEV'";
return _orders;
}
//页面代码
<!-- 父控件 -->
<asp:DataGrid id="DataGrid1" runat="server">
<Columns>
<asp:TemplateColumn ItemStyle-VerticalAlign="Top" HeaderText="Orders" ItemStyle-Width="100%">
<ItemTemplate>
父控件 <%# DataBinder.Eval(Container.DataItem, "CustomerID") %>
<!-- 子控件 -->
<asp:DataGrid runat="server" AutogenerateColumns="False" Width="100%" DataSource='<%# getOrdersDataSource1() %>' ID="Datagrid2" NAME="Datagrid2">
<Columns>
<asp:BoundColumn DataField="OrderID" HeaderText="Order ID" /><asp:TemplateColumn>
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "OrderDate", "子控件={0}" ) %></ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<!-- 子控件 -->
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<!-- 父控件 -->