【问题标题】:How come additional rows aren't being shown when button is clicked in DataGridView?在 DataGridView 中单击按钮时,为什么不显示其他行?
【发布时间】:2014-12-04 22:59:53
【问题描述】:

这是我的代码:

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 添加一个新行。

我不确定为什么没有发生这种情况,也不知道如何实现。非常感谢任何帮助。

【问题讨论】:

标签: c# winforms datagridview


【解决方案1】:

您需要为数据网格重绘发出事件。如果您的 DataSource 不大,最简单的方法是 next:

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

如果你的集合太大,你最好把你的容器从 List 改成 ObservableCollection

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

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

在您的代码中,您可以像使用 List 一样使用 ObservableCollection,但它会告诉您的数据网格更改苹果容器中的项目

【讨论】:

  • dataGridView1.DataSource = null; ObservableCollection<Apple> apples = new ObservableCollection<Apple>();
  • 是的。你说得对。 ObservableCollection 将不起作用。这里stackoverflow.com/questions/16695885/… 是您问题的答案。他们使用 BindingList 工作正常
【解决方案2】:

与许多 UI 框架一样,Forms 不会自动重绘自身 - 因此必须(通常是明确地)告知(通常是明确地)数据已更改并且需要刷新。尝试在事件处理程序结束时调用 datagridview1.Refresh()

【讨论】:

  • ' private void button1_Click(object sender, EventArgs e) { apples.Add(new Apple { Color = "Red"}); dataGridView1.DataSource = 苹果; dataGridView1.Refresh(); }`这是你的意思吗?因为当我这样做时它不起作用。
猜你喜欢
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 2021-08-24
  • 2013-06-14
  • 1970-01-01
  • 2018-03-24
相关资源
最近更新 更多