Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么会有额外的行是';在DataGridView中单击按钮时是否显示?_C#_Winforms_Datagridview - Fatal编程技术网

C# 为什么会有额外的行是';在DataGridView中单击按钮时是否显示?

C# 为什么会有额外的行是';在DataGridView中单击按钮时是否显示?,c#,winforms,datagridview,C#,Winforms,Datagridview,这是我的代码: namespace UpdateDataGridView { public partial class Form1 : Form { public Form1() { InitializeComponent(); } List<Apple> apples = new List<Apple>(); private void button

这是我的代码:

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; }
    }
}
namespace UpdateDataGridView
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
列出苹果=新列表();
私有无效按钮1\u单击(对象发送者,事件参数e)
{
添加(新的Apple{Color=“Red”});
dataGridView1.DataSource=苹果;
}
}
公营苹果
{
公共字符串颜色{get;set;}
}
}
我希望每次按下按钮时都会向dataridview添加一个新行


我不知道为什么这不会发生,我不知道如何实现这一点。非常感谢您的帮助。

与许多UI框架一样,表单不会自动重新绘制自身-因此,当数据发生更改并且需要刷新时,必须(通常是明确地)告知表单。尝试在事件处理程序的末尾调用。

您需要为datagrid重画发出事件。如果数据源不大,最简单的方法是下一步:

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;
    }
ObservableCollection=新的ObservableCollection();
私有无效按钮1\u单击(对象发送者,事件参数e)
{
添加(新的Apple{Color=“Red”});
dataGridView1.DataSource=苹果;
}

在您的代码中,您可以像List一样使用ObservableCollection,但它会告诉您的datagrid有关更改Apple容器中的项目的信息

private void button1\u Click(object sender,EventArgs e){apples.Add(new Apple{Color=“Red”});dataGridView1.DataSource=apples;dataGridView1.Refresh();}`这就是你的意思吗?因为当我这样做时,它不起作用。
dataGridView1.DataSource=null是的。你说得对。ObservableCollection将不起作用。这是你问题的答案。他们使用BindingList列出哪些工作正常