Do you have any column where you can join them?
If yes, what you could do is join the tables in on DataSet with DataRelation and the in page you can get the Childs or the parent using this relationship, following an example
code behind:
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();
}
markup:
<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>
Another option is use the OnItemDataBound event from the repeater and get the values in the code behind.
Code behind:
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();
}
}
}
markup:
<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>
Cheers