1

我有一个绑定到 DataTable 的 DataGridView。

我稍后将一个新的按钮列直接添加到 DGV。下次我刷新表时,我想从 DGV 中清除所有以前的数据。

对于我刚刚做的表,var table = new DataTable(); 但是当 DGV 被定义为方法内的本地时,使用 DataGridView 执行此操作会导致它永远不会显示在表单上。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

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

        private void button1_Click(object sender, EventArgs e)
        {
            //dataGridView1 = new DataGridView(); //<-- uncommenting this line breaks the form's dgv from displaying anything

            DataTable table = new DataTable();
            table.Columns.Add("C_" + table.Columns.Count);
            table.Rows.Add("R1");
            table.Rows.Add("R2");
            dataGridView1.DataSource = table;

            DataGridViewButtonColumn oCol = new DataGridViewButtonColumn();
            oCol.Name = "Buttons";
            oCol.Text = "(...)";
            oCol.UseColumnTextForButtonValue = true;
            dataGridView1.Columns.Add(oCol);
        }
    }
}

这是一个错误还是我应该如何正确刷新/重置/清除 dgv?

编辑:

上面的代码片段已从原始内容中编辑。取消注释代码中的行以查看 button1 在 RunMode 时的不同行为。

4

2 回答 2

1
dataGridView1.DataSource = null;

或者您可以选择清除列/行。

dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();
于 2013-01-11T22:01:50.340 回答
0

我认为这不是一个错误。但不幸的是我无法解释:)

只需使用Controls.Add(..)

    DataGridView dgv = new DataGridView(); 
    private void button1_Click(object sender, EventArgs e)
    {
        DataTable table = new DataTable();
        table.Columns.Add("C_" + table.Columns.Count);
        table.Rows.Add("R1");
        table.Rows.Add("R2");
        dgv.DataSource = table;

        DataGridViewButtonColumn oCol = new DataGridViewButtonColumn();
        oCol.Name = "Buttons";
        oCol.Text = "(...)";
        oCol.UseColumnTextForButtonValue = true;
        dgv.Columns.Add(oCol);

        Controls.Add(dgv); //<--Try to check this.
    }

    private void button2_Click(object sender, EventArgs e)
    {
        dgv.Columns.Clear();
    }
于 2013-01-12T00:33:45.437 回答