如何清除数据网格视图

时间:2012-10-30 11:02:07

标签: c# datagrid

我正在尝试根据ComboBox中的选定项填充DataGridView,我有这部分工作。

但是,我需要能够在从新项目添加新数据之前清除网格,而不是仅仅添加到最后。

如何在向其添加项目之前清除DataGridView?

17 个答案:

答案 0 :(得分:75)

首先,使数据源为空:

this.dataGridView.DataSource = null;

然后清除行:

this.dataGridView.Rows.Clear();

然后将数据源设置为新列表:

this.dataGridView.DataSource = this.GetNewValues();

答案 1 :(得分:10)

如果它绑定到数据源 -

dataGridView.DataSource=null;
dataGridView.Rows.Clear();

为我工作。

答案 2 :(得分:7)

您可以这种方式清除DataGridView

dataGridView1.Rows.Clear();
dataGridView1.Refresh();

如果是databound,请尝试此

dataGridView1.Rows.Clear() // If dgv is bound to datatable
dataGridView1.DataBind();

答案 3 :(得分:5)

如果您不仅要清除数据,还要清除ComboBox,Checkbox,请尝试

dataGridView.Columns.Clear();

答案 4 :(得分:5)

DataGrid.DataSource = null;
DataGrid.DataBind();

答案 5 :(得分:3)

您可以将数据源指定为数据网格的null,然后重新绑定它。

dg.DataSource = null;
dg.DataBind();

答案 6 :(得分:2)

你可以接受下一个指令,并且会做缺乏性能的工作。如果你想看到它的效果,请将下一条指令(技术类似物)中的一条放在需要将DataGridView清除到try {} catch(...){} finally块中,然后等待发生的事情。

     while (dataGridView1.Rows.Count > 1)
    {
        dataGridView1.Rows.RemoveAt(0);
    }

    foreach (object _Cols in dataGridView1.Columns)
    {
        dataGridView1.Columns.RemoveAt(0);
    }

您改进了此任务但是还不够,重置DataGridView存在问题,因为DataGridView对象中保留了colums。最后我建议,我在家庭实践中实现的最好方法是将此gridView作为包含行,列的文件处理:基于行和列之间匹配的记录集合。如果你可以改进,那么你自己选择a)或b):foreach或while。

     //(a): With foreach 
    foreach (object _Cols in dataGridView1.Columns)
    {
        dataGridView1.Columns.RemoveAt(0);
    }

    foreach(object _row in dataGridView1.Rows){
        dataGridView1.Rows.RemoveAt(0);
    }

    //(b): With foreach 
    while (dataGridView1.Rows.Count > 1)
    {
        dataGridView1.Rows.RemoveAt(0);
    }
    while (dataGridView1.Columns.Count > 0)
    {
        dataGridView1.Columns.RemoveAt(0);
    }

好吧,作为一个推荐从未在你的生活中首先删除列,顺序是在cols之后的行之前,因为逻辑上首先创建的列然后是行。这将是正确分析的惩罚。

     foreach (object _Cols in dataGridView1.Columns)
    {
        dataGridView1.Columns.RemoveAt(0);
    }
    foreach (object _row in dataGridView1.Rows)
    {
        dataGridView1.Rows.RemoveAt(0);
    }
    while (dataGridView1.Rows.Count > 1)
    {
        dataGridView1.Rows.RemoveAt(0);
    }

    while (dataGridView1.Columns.Count > 0)
    {
        dataGridView1.Columns.RemoveAt(0);
    }

然后,将其放在函数或方法中。

 private void ClearDataGridViewLoopWhile()
{           
    while (dataGridView1.Rows.Count > 1)
    {
        dataGridView1.Rows.RemoveAt(0);
    }

    while (dataGridView1.Columns.Count > 0)
    {
        dataGridView1.Columns.RemoveAt(0);
    }
}

private void ClearDataGridViewForEach()
{
    foreach (object _Cols in dataGridView1.Columns)
    {
        dataGridView1.Columns.RemoveAt(0);
    }
    foreach (object _row in dataGridView1.Rows)
    {
        dataGridView1.Rows.RemoveAt(0);
    }
}

最后,调用你的新函数ClearDataGridViewLoopWhile();或ClearDataGridViewForEach();你需要在哪里使用它,但是在你进行查询和改变几个表时会推荐它,这些表将在grieView中加载不同的标题名称。但是如果你想在这里保留标题,那么就给出了一个解决方案。

答案 7 :(得分:1)

如果要清除所有标题以及数据,例如,如果要在具有不同字段的2个完全不同的数据库之间切换,因此不同的列和列标题,我发现以下内容可以正常工作。否则,当您切换时,您将从网格中显示两个数据库中的列/字段。

dataTable.Dispose();//get rid of existing datatable
dataTable = new DataTable();//create new datatable

datagrid.DataSource = dataTable;//clears out the datagrid with empty datatable
//datagrid.Refresh(); This does not seem to be neccesary

dataadapter.Fill(dataTable); //assumming you set the adapter with new data               
datagrid.DataSource = dataTable; 

答案 8 :(得分:1)

private void ClearGrid()
{    
    if(this.InvokeRequired) this.Invoke(new Action(this.ClearGrid));

    this.dataGridView.DataSource = null;
    this.dataGridView.Rows.Clear();
    this.dataGridView.Refresh();
}

答案 9 :(得分:1)

dataGridView1.Rows.Clear();
dataGridView1.Refresh();

答案 10 :(得分:0)

datatable.Clear();
dataGridView1.DataSource = datatable;

答案 11 :(得分:0)

刷新datagridview并刷新数据表

dataGridView1.Refresh();
datatable.Clear();

答案 12 :(得分:0)

要拥有Datagrid,您必须拥有一个格式化Datagrid的方法。如果要清除Datagrid,只需调用方法即可。

这是我的方法:

    public string[] dgv_Headers = new string[] { "Id","Hotel", "Lunch", "Dinner", "Excursions", "Guide", "Bus" }; // This defined at Public partial class


    private void SetDgvHeader()
    {
        dgv.Rows.Clear();
        dgv.ColumnCount = 7;
        dgv.RowHeadersVisible = false;
        int Nbr = int.Parse(daysBox.Text);  // in my method it's the textbox where i keep the number of rows I have to use
        dgv.Rows.Add(Nbr);
        for(int i =0; i<Nbr;++i)
            dgv.Rows[i].Height = 20;
        for (int i = 0; i < dgv_Headers.Length; ++i)
        {
            if(i==0)
                dgv.Columns[i].Visible = false;  // I need an invisible cells if you don't need you can skip it
            else
                dgv.Columns[i].Width = 78;
            dgv.Columns[i].HeaderText = dgv_Headers[i];
        }
        dgv.Height = (Nbr* dgv.Rows[0].Height) + 35;
        dgv.AllowUserToAddRows = false;
    }

dgv是DataGridView的名称

答案 13 :(得分:-2)

解决方案是:

dataGridView1.Rows.RemoveAt(0);

清除网格并保留列。

答案 14 :(得分:-2)

YourGrid.Items.Clear();
YourGrid.Items.Refresh();

答案 15 :(得分:-3)

这对我有用

'int numRows = dgbDatos.Rows.Count;

            for (int i = 0; i < numRows; i++)
            {
                try
                {

                    int max = dgbDatos.Rows.Count - 1;
                    dgbDatos.Rows.Remove(dgbDatos.Rows[max]);
                    btnAgregar.Enabled = true;
                }
                catch (Exception exe)
                {
                    MessageBox.Show("No se puede eliminar " + exe, "",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }`

答案 16 :(得分:-6)

解决方案是:

while (dataGridView1.RowCount > 1)
{
    dataGridView1.Rows.RemoveAt(0);
}