2008-09-24 128 views
34

我試圖將List<T>綁定到DataGridView控件,並且我沒有創建自定義綁定的任何運氣。winForms + DataGridView綁定到列表<T>

我曾嘗試:

gvProgramCode.DataBindings.Add(new Binding("Opcode",code,"Opcode")); 

它拋出一個異常,說什麼也沒有通過屬性名稱中。

問題列的名稱是「操作碼」。 List<T>中屬性的名稱是Opcode。

回答編輯:問題是我沒有在我的類中的可綁定字段作爲屬性,只是公共領域......顯然它不反映在字段,只是屬性。

+0

LOL這正是我在我的意見又增加了,很高興你有你的問題解決了。 – 2008-09-24 03:15:11

+2

+1我剛剛有同樣的問題。男人,吮球! – 2009-12-10 23:53:27

+0

你是天賜之物。我已經連續六個小時一直在對付這個問題的頭腦。嘗試了我能想到的一切,以及我能想到的一切。沒有運氣。最後找到你的帖子,當然,我很匆忙,並把他們的領域,而不是屬性。 – Locke 2016-10-08 02:19:29

回答

14

網格上的屬性是否綁定到Opcode上?如果要直接綁定到List,則只需DataSource = list。數據綁定允許自定義綁定。你是否想要做一些比數據源更多的東西?

你會得到一堆空行?自動生成的列有名字嗎?你有沒有驗證數據是在對象(不只是string.empty)?

class MyObject 
    { 
     public string Something { get; set; } 
     public string Text { get; set; } 
     public string Other { get; set; } 
    } 

    public Form1() 
    { 
     InitializeComponent(); 

     List<MyObject> myList = new List<MyObject>(); 

     for (int i = 0; i < 200; i++) 
     { 
      string num = i.ToString(); 
      myList.Add(new MyObject { Something = "Something " + num , Text = "Some Row " + num , Other = "Other " + num }); 
     } 

     dataGridView1.DataSource = myList; 
    } 

這應該做工精細...

+0

是的。如果我只是做DataSource = list,我會得到一堆空列。 – FlySwat 2008-09-24 02:58:25

5

我真的不能告訴你想你怎麼了包括例如做,而是結合對象的泛型列表是,如果你非常簡單只是要列出的對象:

private BindingSource _gridSource; 

    private BindingSource GridSource 
    { 
     get 
     { 
      if (_gridSource == null) 
       _gridSource = new BindingSource(); 
      return _gridSource; 
     } 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     List<FluffyBunny> list = new List<FluffyBunny>(); 
     list.Add(new FluffyBunny { Color = "White", EarType = "Long", Name = "Stan" }); 
     list.Add(new FluffyBunny { Color = "Brown", EarType = "Medium", Name = "Mike" }); 
     list.Add(new FluffyBunny { Color = "Mottled", EarType = "Short", Name = "Torvald" }); 

     GridSource.DataSource = list; 
     dataGridView1.Columns["EarType"].Visible = false; //Optionally hide a column 
     dataGridView1.DataSource = GridSource; 

    } 

如果你只是想顯示List的類型的特定屬性,你應該能夠使不必要的列(S)隱形。

從技術上講,你並不需要創建BindingSource,但是如果我有更新或更改,我發現它更容易一些。

希望這會有所幫助。

4

有同樣的問題...我明顯有公共領域的結構。網格中沒有任何東西。提供公共獲得者,工作。

3

我發現的另一個解決方案是使用BindingList集合。



private void Form1_Load(object sender, EventArgs e) 
{ 
    BindingList people= new BindingList { 
    new Person {Name="John",Age=23}, 
    new Person {Name="Lucy",Age=16} 
    }; 

    dataGridView1.DataSource= people; 
} 

它正常工作對我來說,

相關問題