2013-01-10 90 views
3

我举一个简单的例子来解释我想要什么:DataGridView的数据绑定

我定义了一个名为Student类,它有两个属性:名称主题

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

我创建Student类的两个实例,例如:

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

我的问题是,有没有什么办法可以数据绑定这studentListDataGridView,如下所示:

dataGridView.DataSource = studentList; 

第一列是学生姓名,第二列是combobox,显示学生的所有科目。

非常感谢您提前预约。

+0

你有没有试过了'studentList'用'dataGridView.DataSource = studentList'绑定?那么这就是将'list'绑定到'DataGridView'的一种方法。这里你的主要问题是什么? – spajce

回答

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

呈现: enter image description here

顺便说一句,你的学生班级应该是这样的:

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