Sharpeye500
Sharpeye500

Reputation: 9073

Display generic list data back to repeater in a grouped manner

I have a generic list

List<StudentInfo>

StudentInfo has

Name,Marks,Subject,Age as properties.

I get this StudentInfo back as as list, which am trying to bind to a repeater.

<asp:Repeater ID="myRepeater" runat="server">
            <ItemTemplate>                
                     <%# Eval("Name") %>                
                     <%# Eval("Marks") %>
                     <%# Eval("Subject") %>
                     <%# Eval("Age") %>                  
            </ItemTemplate>
        </asp:Repeater>

Output i am getting:

John Smith
85
English
12
John Doe
78
English
12
Mary Ann
72
Chemistry
14

Expected result on repeater databinding is - data should be display per subject

English

John Smith
85
12
John Doe
78
12


Chemistry

Mary Ann
72
14

I tried to use nested repeater, but not getting the expected result. The below one just gives me only subject back when the code behind is

              myParent.DataSource = listOfStudentInfo;

              myParent.DataBind();

How do i make the child repeater to show the rest?

 <asp:Repeater ID="myParent" runat="server">
            <ItemTemplate>               
                        <%# Eval("Subject") %>                  
                <asp:Repeater runat="server" ID="myChild">
                 <ItemTemplate>               
                         <%# Eval("Name") %>   
                         <%# Eval("Marks") %>   
                         <%# Eval("Age") %>   
                  </ItemTemplate>
                 </asp:Repeater> 
               </ItemTemplate>
</asp:Repeater>

Upvotes: 0

Views: 171

Answers (1)

gunvant.k
gunvant.k

Reputation: 1086

change your datasource Model to have enumerable of StudentInfo object like this,

public class Model{
  public string Subject {get; set;}
  public IEnumerable<StudentInfo> StudentInfo {get; set;}
}

Then your parent repeater have subject property and nested repeater have StudentInfo as DataSource,

<asp:Repeater ID="myParent" runat="server">
            <ItemTemplate>               
                        <%# Eval("Subject") %>                  
                <asp:Repeater runat="server" ID="myChild" DataSource='<%# Eval("StudentInfo ") %>'>
                 <ItemTemplate>               
                         <%# Eval("Name") %>   
                         <%# Eval("Marks") %>   
                         <%# Eval("Age") %>   
                  </ItemTemplate>
                 </asp:Repeater> 
               </ItemTemplate>
</asp:Repeater>

And your dataSource for Parents goes like this,

              myParent.DataSource = listOfModel;    
              myParent.DataBind();

Upvotes: 1

Related Questions