2012-04-10 6 views
0

私は学生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のを学生のリストをバインドする必要がでたGridViewにリスト内のリストをバインドする方法名前フィールドのみが表示されます。どのようにマークのリストを名前欄にも表示することができます。私は数あれば(TemplateFieldフィールドとしてカスタム・コンテナを追加し、この

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

私は1つのGridViewのだけ持ってasp.netでのasp.netコード – msigman

+0

アップロードASPコード –

+0

を投稿してください。コードの背後にある私は、学生のリストを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

ようにGridViewを表示する必要がある

(これですべての学生は、マークの数が同じで、時には3、または時々5などを意味します) (例:別のGridView,RepeaterまたはListView)またはLabelまたはTextBox(テンプレートの数が固定されている場合)。 GridView1_RowDataBoundをオーバーライドし、コンテナの値をDataSourceに設定するか、マークを表示するラベルを設定します。 ASPXで

: - CSで

<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> 

: -

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(); 
    } 
    } 
}