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

时间:2010-04-15 20:56:56

标签: c# winforms linq datagridview bindingsource

//从此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;
}

//在我的表格上:

BindingSource bs = new BindingSource();

    private void fillStudentGrid()
    {
        bs.DataSource = Admin.GetStudents();
        dgViewStudents.DataSource = bs;
        dgViewStudents.Columns.Remove("ID");
    }

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

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

    dgViewStudents.AutoGenerateColumns = false;
    dgViewStudents.DataSource = bs;
    dgViewStudents.Columns.Add("ID", "ID Number");
}

我获得了适当的行数,并且列标题设置正确...但行中都填充了空白数据。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

学生类属性也可以像这样重新设计。使用可浏览的false选项,您无需删除gridview列。

    using System.ComponentModel;

    [Browsable(false)]
    [Description("Öğrenci kayıt numarası")]
    [DisplayName("Öğrenci Kayıt No")]
    public int StudentID { get; set; }

答案 2 :(得分:0)

您也可以在查询中添加列,即使这些列不存在。

例如:选择employeeID,empname,0作为table_name的薪水

并将其绑定到您的datagridview。