4

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

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

4

3 回答 3

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);
于 2010-04-15T23:33:42.217 回答
1

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

    using System.ComponentModel;

    [Browsable(false)]
    [Description("Öğrenci kayıt numarası")]
    [DisplayName("Öğrenci Kayıt No")]
    public int StudentID { get; set; }
于 2015-02-25T09:49:26.703 回答
0

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

例如:从 table_name 中选择employeeID、empname、0 作为薪水

并将其绑定到您的datagridview。

于 2016-12-08T04:22:47.223 回答