それらに参加できるコラムはありますか?はいの場合、例に従って、DataSet のテーブルを DataRelation で結合し、ページ内でこの関係を使用して子または親を取得できます。
コードビハインド:
protected void Page_Load(object sender, EventArgs e)
{
DataSet ds1 = new DataSet();
DataSet ds2 = new DataSet();
DataTable dt1 = new DataTable("Table1");
DataTable dt2 = new DataTable("Table2");
DataSet ds = new DataSet("DataSet");
dt1.Columns.Add("Eno", typeof(Int32));
dt1.Columns.Add("Ename", typeof(String));
dt1.Columns.Add("Salary", typeof(Double));
dt1.Columns.Add("Deptno", typeof(Int32));
dt1.PrimaryKey = new DataColumn[] { dt1.Columns["Eno"] };
dt2.Columns.Add("Deptno", typeof(Int32));
dt2.Columns.Add("Dname", typeof(String));
dt2.PrimaryKey = new DataColumn[] { dt2.Columns["Deptno"] };
ds1.Tables.Add(dt1);
ds2.Tables.Add(dt2);
// Loading data into dt1, dt2:
object[] o1 = { 1, "dvs.kiran kumar", 50000.50, 10 };
object[] o2 = { 2, "Raj", 4000.50, 20 };
object[] o3 = { 3, "Gary", 10000.50, 30 };
object[] c1 = { 10, "MFG" };
object[] c2 = { 20, "EAS" };
object[] c3 = { 30, "E&U" };
object[] c4 = { 40, "PES" };
dt2.Rows.Add(c1);
dt2.Rows.Add(c2);
dt2.Rows.Add(c3);
dt2.Rows.Add(c4);
dt1.Rows.Add(o1);
dt1.Rows.Add(o2);
dt1.Rows.Add(o3);
DataSet dsJoined = new DataSet();
dsJoined.Tables.Add(ds1.Tables[0].Copy());
dsJoined.Tables.Add(ds2.Tables[0].Copy());
DataRelation drel = new DataRelation("EquiJoin", dsJoined.Tables[1].Columns["Deptno"], dsJoined.Tables[0].Columns["Deptno"]);
dsJoined.Relations.Add(drel);
rptJoined.DataSource = dsJoined.Tables[1];
rptJoined.DataBind();
}
マークアップ:
<asp:Repeater runat="server" ID="rptJoined">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
Depto: <%# ((System.Data.DataRowView) Container.DataItem)["Dname"] %>
</td>
<asp:Repeater runat="server" ID="rptChild" DataSource='<%# ((System.Data.DataRowView) Container.DataItem).Row.GetChildRows("EquiJoin") %>'>
<ItemTemplate>
<td>
Ename: <%# ((System.Data.DataRow) Container.DataItem)["Ename"] %>
</td>
</ItemTemplate>
</asp:Repeater>
<tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
もう 1 つのオプションは、リピーターからの OnItemDataBound イベントを使用して、コード ビハインドで値を取得することです。
コードビハインド:
protected void rptJoined_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DataRowView drv = (DataRowView)e.Item.DataItem;
Literal ltrColumn1 = (Literal)e.Item.FindControl("ltrColumn1");
Literal ltrColumn2 = (Literal)e.Item.FindControl("ltrColumn2");
ltrColumn1.Text = drv["Dname"].ToString();
var childs = drv.Row.GetChildRows("EquiJoin");
if (childs.Count() > 0)
{
ltrColumn2.Text = childs[0]["Ename"].ToString();
}
}
}
マークアップ:
<asp:Repeater runat="server" ID="rptJoined" OnItemDataBound="rptJoined_ItemDataBound">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Literal runat="server" ID="ltrColumn1" />
</td>
<td>
<asp:Literal runat="server" ID="ltrColumn2" />
</td>
<tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
乾杯