如何删除表单加载上的所有DataGridView行?

时间:2012-01-08 07:38:09

标签: c# .net winforms datagridview

如何删除除列标题以外的所有datagridview行?

我试过了:

dataGridView1.Rows.clear();

但它不起作用。

我尝试遍历行并使用RemoveAt方法,但它不会删除所有行:

private void Form5_Load(object sender, EventArgs e)
{       
    dataGridView1.AutoGenerateColumns = true;
    SqlConnection con = new SqlConnection(@"Data Source=.\myserver;Initial Catalog=test;Integrated Security=True");
    adapter = new SqlDataAdapter("SELECT id as [#], description as [Description], unit as [Unit], amount as [Amount], unitPrice as [Unit Price], total as [Total] FROM tbl_poMaterials", con);
    adapter.SelectCommand.CommandType = CommandType.Text;
    DataTable tb = new DataTable();
    adapter.Fill(tb);
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
    dataGridView1.DataSource = tb;

    dataGridView1.Columns[0].Width = 30;
    dataGridView1.Columns[0].ReadOnly = true;
    dataGridView1.Columns[1].Width = 660;

    for (int i = 0; i < tb.Rows.Count; i++)
    {
        tb.Rows.RemoveAt(i);
    }
}

9 个答案:

答案 0 :(得分:13)

这对我有用:

do
{
   foreach (DataGridViewRow row in dataGridViewError.Rows)
   {
      try
      {
        dataGridViewError.Rows.Remove(row);
      }
      catch (Exception) { }
   }
} while (dataGridViewError.Rows.Count > 1);

答案 1 :(得分:8)

您需要清除DataSource或DataTable,而不是datagridview。

dataGridView.DataSource = null;
dataGridView.Refresh();

dataTable.Clear();
dataGridView.Refresh();

答案 2 :(得分:6)

我用

dataGridViewResult.Rows.Clear();

清除每一行而不删除列。

答案 3 :(得分:3)

如果你的网格绑定到DataTable或其他一些DataSource,那么你需要清除它,而不是网格,否则Rows.clear()方法是正确的,最好的方法。

答案 4 :(得分:3)

对于同样的问题,我尝试了几种方法,但未能成功。正如其中一个答案所说:

for(int i = 0; i < myDataGridView.Rows.Count; i++)
{
    myDataGridView.Rows.RemoveAt(i)
}

实际上会删除该行,但下一行会转移到上一行!所以,上面的方法删除了一半的行数!因此,你需要重复动作,直到它变为零!

或者,尝试从最后一行删除到第一行。它有效!

for(int i = myDataGridView.Rows.Count - 1; i >= 0; i--)
{
    myDataGridView.Rows.RemoveAt(i);
}

答案 5 :(得分:1)

//这应该有效

int rowCount = dataGridView1.Rows.Count;

for (int i = 0; i < rowCount; i++)
{
    dataGridView1.Rows.RemoveAt(0);
}

您的解决方案无法正常工作,因为每次for循环检查条件i < rowCount时,rowCount都会因dataGridView1.Rows.RemoveAt(i)而减1。所以只有一半的行会被删除。

答案 6 :(得分:1)

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

答案 7 :(得分:1)

使行和列计数为零,并刷新数据集。

dataGrid.Rows.Count = 0; 

dataGrid.Refresh();

答案 8 :(得分:0)

int rowCount = dtg.Rows.Count;
        for (int i = rowCount - 1; i >= 0; i--)
        {
            DataGridViewRow dr = dtg.Rows[i];
            dtg.Rows.Remove(dr);
        }