尝试清除时DataGridView奇数显示行为

时间:2013-01-11 21:58:49

标签: c# datagridview datatable

我有一个绑定到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?

编辑:

上面的代码段已经从原始版本进行了编辑。取消注释代码中的行,以查看在RunMode中button1的不同行为。

2 个答案:

答案 0 :(得分:1)

dataGridView1.DataSource = null;

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

dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();

答案 1 :(得分: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();
    }