2012-04-10 49 views
0

我有一個名爲學生如何列表裏綁定列表到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 2012-04-10 04:49:09

+0

上傳ASP代碼 – 2012-04-10 05:15:57

+0

在asp.net我只有一個GridView控件。在後面的代碼中,我只是將學生列表綁定到gridview。 – niknowj 2012-04-10 05:19:16

回答

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,RepeaterListView)或一些LabelTextBox作爲模板字段(如果標記數量是固定的)。覆蓋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(); 
    } 
    } 
}