2012-04-10 2 views
0

У меня есть класс с именем StudentКак привязать список внутри списка к GridView в ASP.NET

public class Student 
{ 
    public string Name { get; set; } 
    public List<int> Marks { get; set; } 
    public Student() 
    { 
    } 
} 

и мне нужно привязать список студентов к GridView

 List<Student> StudentList = new List<Student>(); 

     Student stud = new Student(); 
     stud.Name = "Scott"; 
     List<int> marks = new List<int>(); 
     marks.Add(10); 
     marks.Add(20); 
     marks.Add(30); 
     stud.Marks = marks; 

     StudentList.Add(stud); 

     Student stud1 = new Student(); 
     stud1.Name = "Jon"; 
     List<int> marks1 = new List<int>(); 
     marks1.Add(10); 
     marks1.Add(20); 
     marks1.Add(30); 
     stud1.Marks = marks1; 

     StudentList.Add(stud1); 

     GridView1.DataSource = StudentList; 
     GridView1.DataBind(); 

Элемент GridView показывает только поле имени. как я могу показать список меток также с полем имени. (В этом все студенты имеют одинаковое количество баллов, значит, иногда 3, а иногда и т.д.) 5.

мне нужно показать GridView, как этот

Name Mark1 Mark2 Mark3 
Scott 10  20 30 
Jon  10  20 30 
+0

Пожалуйста, пост asp.net код – msigman

+0

загрузки кода жерех –

+0

в ASP.NET У меня есть только один GridView. в коде позади я просто привязываю список учеников к gridview. – niknowj

ответ

1

Пример:

<asp:GridView ID="grid1" runat="server" AutoGenerateColumns="false" Width="100%"> 
    <Columns> 
     <asp:BoundField DataField="Name" HeaderText="Name" /> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:GridView ID="grid2" runat="server" AutoGenerateColumns="False" Width="100%"> 
       <Columns> 
        <asp:BoundField DataField="Mark" HeaderText="Mark" /> 
       </Columns> 
      </asp:GridView> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

Код:

protected override void OnInit(EventArgs e) 
{ 
    grid1.RowDataBound += grid1_RowDataBound; 
} 

void grid1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    var grid2 = (GridView)e.Item.FindControl("grid2"); 
    grid2.DataSource = StudentList.Where(w => w.Name = (e.Item.DataItem as Student).Name); 
    grid2.Bind(); 
} 

Я не проверить его

1

Добавить пользовательский контейнер в TemplateField поле (если номер знаков: Пример: другой GridView, Repeater или ListView) или некоторые Label или TextBox в качестве поля шаблона (если количество отметок фиксировано). Переопределить GridView1_RowDataBound и установить значения для контейнера DataSource или метки для отображения меток.

в ASPX: -

<asp:GridView ID="GridView1" runat="server" 
     onselectedindexchanged="GridView1_SelectedIndexChanged" 
     onrowdatabound="GridView1_RowDataBound"> 
     <Columns> 
     <asp:BoundField DataField="Name" HeaderText="Name" /> 
      <asp:TemplateField HeaderText="Marks"> 
        <ItemTemplate> 
         <asp:DataList runat="server" ID="DataList1" RepeatDirection="Horizontal" > 
         <ItemTemplate> 
         <%# Container.DataItem.ToString() %> 

         </ItemTemplate> 
         </asp:DataList> 
        </ItemTemplate> 
       </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

в CS: -

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowIndex != -1) 
     { 
      var student = e.Row.DataItem as Student; 
      var dataList = e.Row.FindControl("DataList1") as DataList; 
      dataList.DataSource = student.Marks; 

      dataList.DataBind(); 
     } 
    } 
0

Попробуйте следующий код:

protected void gridStudentDetails_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
Student studentObj = (Student)StudentList[e.Row.RowIndex]; 
if (studentObj != null) 
    { 
    DropDownList ddlMarks = (DropDownList)e.Row.FindControl("ddlMarks"); 
    if(ddlMarks != null) 
    { 
    ddlMarks.DataSource = studentObj.Marks; 
    ddlMarks.DataBind(); 
    } 
    } 
} 
Смежные вопросы