2014-10-09 91 views
0

這是我的代碼:如何在DataGridView中單擊按鈕時未顯示其他行?

namespace UpdateDataGridView 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     List<Apple> apples = new List<Apple>(); 

     private void button1_Click(object sender, EventArgs e) 
     { 
      apples.Add(new Apple { Color = "Red"}); 
      dataGridView1.DataSource = apples; 
     } 
    } 
    public class Apple 
    { 
     public string Color { get; set; } 
    } 
} 

我期待在每次按下按鈕時要添加到dataridview一個新行。

我不知道爲什麼這不會發生,我不知道如何做到這一點。任何幫助深表感謝。

+0

的可能重複[C#DataGridView的數據源時更改不更新](http://stackoverflow.com/questions/9758577/c-sharp-datagridview-not-updated-when-datasource-is-changed) – 2014-10-09 21:28:36

回答

1

您需要爲datagrid重繪發出事件。最簡單的方法,如果你的數據源是不大旁邊:

private void button1_Click(object sender, EventArgs e) 
    { 
     apples.Add(new Apple { Color = "Red"}); 
     dataGridView1.DataSource = null; 
     dataGridView1.DataSource = apples; 
    } 

如果你的收藏是太大了,你最好給你的容器從列表改變的ObservableCollection

ObservableCollection<Apple> apples = new ObservableCollection<Apple>(); 

    private void button1_Click(object sender, EventArgs e) 
    { 
     apples.Add(new Apple { Color = "Red"}); 
     dataGridView1.DataSource = apples; 
    } 

在您的代碼,你可以使用的ObservableCollection就像列表,但它會告訴你有關數據網格在你的蘋果容器交換項目

+0

'dataGridView1.DataSource = null; '< - 這個工程'的ObservableCollection 蘋果=新的ObservableCollection ();'< - 我不能得到這個工作。 – hedgesketch 2014-10-09 22:39:38

+0

是的。你說得對。 ObservableCollection 將不起作用。這裏http://stackoverflow.com/questions/16695885/binding-listt-to-datagridview-in-winform是你的問題的答案。他們使用BindingList 什麼工作正常 – ArhiChief 2014-10-10 05:58:14

0

與許多UI框架一樣,Forms不會自動重新繪製自己 - 因此必須告知(通常是顯式)數據何時發生更改以及是否需要刷新。嘗試在事件處理程序結束時調用datagridview1.Refresh()

+0

「私人無效的button1_Click(對象發件人,EventArgs的) { apples.Add(新的蘋果{顏色= 」紅「}); dataGridView1.DataSource = apples; dataGridView1.Refresh(); 「這是你的意思嗎?因爲當我這樣做時,它不起作用。 – hedgesketch 2014-10-09 22:14:55

相關問題