2014-10-09 55 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

相关问题