Hi Rose,
I have created a sample which full fill your requirement you need to modify the code according to your need.
HTML
<div>
<asp:DataList ID="dlEmployees" runat="server" OnItemDataBound="BindRepeater">
<ItemTemplate>
<asp:Label ID="lblRank" Font-Bold="true" Text='<%# string.Format("Rank {0}",Eval("Rank")) %>'
runat="server" />
<asp:Repeater ID="rptEmployees" runat="server">
<HeaderTemplate>
<tr>
<th>
Name
</th>
<th>
Id
</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%# Eval("Name") %>
</td>
<td>
<%# Eval("Id") %>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:DataList>
</div>
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("Rank"), new DataColumn("Name"), new DataColumn("Id") });
dt.Rows.Add(1, "Arun", 123);
dt.Rows.Add(2, "Varun", 456);
dt.Rows.Add(3, "Tarun", 789);
dt.Rows.Add(1, "Karan", 789);
dt.Rows.Add(2, "Saran", 951);
ViewState["Data"] = dt;
dlEmployees.DataSource = dt.AsEnumerable()
.GroupBy(r => new { Rank = r["Rank"] })
.Select(g => g.OrderBy(r => r["Rank"]).First())
.CopyToDataTable();
dlEmployees.DataBind();
}
}
protected void BindRepeater(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string lblRank = (e.Item.FindControl("lblRank") as Label).Text.Split(' ')[1];
Repeater rptEmployees = e.Item.FindControl("rptEmployees") as Repeater;
DataTable dt = ViewState["Data"] as DataTable;
DataView dv = new DataView(dt);
dv.RowFilter = "Rank =" + lblRank;
rptEmployees.DataSource = dv;
rptEmployees.DataBind();
}
}
VB.Net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn() {New DataColumn("Rank"), New DataColumn("Name"), New DataColumn("Id")})
dt.Rows.Add(1, "Arun", 123)
dt.Rows.Add(2, "Varun", 456)
dt.Rows.Add(3, "Tarun", 789)
dt.Rows.Add(1, "Karan", 789)
dt.Rows.Add(2, "Saran", 951)
ViewState("Data") = dt
dlEmployees.DataSource = dt.AsEnumerable().GroupBy(Function(r) New With { _
Key .Rank = r("Rank") _
}).[Select](Function(g) g.OrderBy(Function(r) r("Rank")).First()).CopyToDataTable()
dlEmployees.DataBind()
End If
End Sub
Protected Sub BindRepeater(sender As Object, e As DataListItemEventArgs)
If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
Dim lblRank As String = TryCast(e.Item.FindControl("lblRank"), Label).Text.Split(" "c)(1)
Dim rptEmployees As Repeater = TryCast(e.Item.FindControl("rptEmployees"), Repeater)
Dim dt As DataTable = TryCast(ViewState("Data"), DataTable)
Dim dv As New DataView(dt)
dv.RowFilter = Convert.ToString("Rank =") & lblRank
rptEmployees.DataSource = dv
rptEmployees.DataBind()
End If
End Sub
ScreenShot
