3

私が欲しいものを説明するために簡単な例を挙げます:

という名前のクラスを定義しました。これには、 NameSubjectsStudentという 2 つのプロパティがあります。

public class Student()
{
     public string Name;
     public List<string> Subjects;
}

たとえば、Student クラスの 2 つのインスタンスを作成しました。

List<string> jackSubjects = new List<string>();
jackSubjects.Add("Math");
jackSubjects.Add("Physics");
Student Jack = new Student("Jack", jackSubjects);
List<string> alanSubjects = new List<string>();
alanSubjects.Add("Accounting");
alanSubjects.Add("Science");
Student Alan = new Student("Alan", alanSubjects);

次に、リスト StudentList を作成します。

List<Student> studentList = new List<Student>();
studentList.Add(Jack);
studentList.Add(Alan);

私の質問は、次のようなものでこれstudentListをデータバインドできる方法はありますか?DataGridView

dataGridView.DataSource = studentList;

最初の列は生徒の名前で、2 番目の列はcombobox生徒のすべての科目を示す です。

よろしくお願いいたします。

4

1 に答える 1

1

次のようなものが機能します。

  1. RowDataBound イベントをグリッドに追加し、サブジェクトのドロップダウン リストを保持するテンプレート列を作成します。

    <asp:GridView ID="dataGridView" runat="server" AutoGenerateColumns="false" OnRowDataBound="dataGridView_RowDataBound">
       <Columns>
           <asp:BoundField DataField="Name" />
           <asp:TemplateField>
               <ItemTemplate>
                   <asp:DropDownList ID="subjects" runat="server" ></asp:DropDownList>
               </ItemTemplate>
           </asp:TemplateField>
       </Columns>
    

  2. 次に、コード ビハインドで RowDataBound イベントを次のように処理します。

    protected void dataGridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
      if (e.Row.RowType == DataControlRowType.DataRow)
      {
        var ddl = (e.Row.FindControl("subjects") as DropDownList);
        ddl.DataSource = (e.Row.DataItem as Student).Subjects;
        ddl.DataBind();
      }
    }
    

レンダリング: ここに画像の説明を入力

ところで、 Student クラスは次のようになります。

public class Student
{
     public string Name {get;set;}
     public List<string> Subjects {get;set;}

     public Student(string name, List<string> subjects)
     {
         Name = name;
         Subjects = subjects;
     }
}
于 2013-01-10T20:27:51.370 に答える