2010-04-15 36 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。