C#:使用代码将列添加到绑定DatagridView

mdv*_*sta 4 c# linq datagridview bindingsource winforms

//从此Admin类获取数据:

public static IQueryable<Student> GetStudents()
{
    DojoDBDataContext conn = new DojoDBDataContext();

    var query =
        from s in conn.Students
        join b in conn.Belts on s.BeltID equals b.ID
        orderby s.LastName ascending
        select s;

    return query;
}
Run Code Online (Sandbox Code Playgroud)

//在我的表格上:

BindingSource bs = new BindingSource();

    private void fillStudentGrid()
    {
        bs.DataSource = Admin.GetStudents();
        dgViewStudents.DataSource = bs;
        dgViewStudents.Columns.Remove("ID");
    }
Run Code Online (Sandbox Code Playgroud)

工作完全正常,但我不想删除我不想要的20多列数据,而是只添加我做的几个.此外,获得标题标题的名称是一个奖励.但是,add方法对我不起作用:

private void fillStudentGrid()
{
    bs.DataSource = Admin.GetStudents();

    dgViewStudents.AutoGenerateColumns = false;
    dgViewStudents.DataSource = bs;
    dgViewStudents.Columns.Add("ID", "ID Number");
}
Run Code Online (Sandbox Code Playgroud)

我得到适当的行数,列标题设置正确...但行填充空白数据.

Ari*_*oth 8

您没有看到任何数据的原因是您实际上没有将列绑定到任何内容.所需行的数量由绑定确定,并且网格知道如果有任何列,则每个数据项需要一行,但没有列则不显示任何列.添加新列时,它将显示在所有行中,但它不会自动绑定到您的数据源.为此,您需要在将列添加到集合之前在列上设置DataPropertyName:

bs.DataSource = Admin.GetStudents();
dgViewStudents.AutoGenerateColumns = false;
dgViewStudents.DataSource = bs;

DataGridViewColumn col = new DataGridViewTextBoxColumn();
col.DataPropertyName = "ID";
col.HeaderText = "ID Column";
col.Name = "foo";
dgViewStudents.Columns.Add(col);
Run Code Online (Sandbox Code Playgroud)