2010-04-15 43 views
4

//从该管理类获取数据:C#:添加列要绑定的DataGridView随着代码

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

我得到行适当数量和列标题设置正确......但行充满了空白数据。

+1

实际上,即使使用第一个fillStudentGrid()代码,它也无法正常工作,它不会从conn.Belts返回属性。卫生署!我可以用lambda表达式来处理linq查询,但我试图保持数据逻辑分离。 – mdvaldosta 2010-04-15 21:10:08

回答

6

你看不到数据的原因是你并没有真正将列绑定到任何东西。所需行数由绑定确定,网格知道,如果有任何列,则每个数据项需要一行,但没有列时不显示任何内容。添加新列时,它将出现在所有行中,但不会自动绑定到数据源。要做到这一点,你需要设置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); 
0

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

using System.ComponentModel; 

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

即使它们不存在,也可以向查询添加列。

例如:从table_name的

选择雇员,empname,0作为工资和束缚,这对您的datagridview。