Как удалить все строки DataGridView при загрузке формы? - PullRequest
8 голосов
/ 08 января 2012

Как удалить все строки таблицы данных, кроме заголовков столбцов?

Я пытался:

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 ]

13 голосов
/ 01 ноября 2012

Это сработало для меня:

do
{
   foreach (DataGridViewRow row in dataGridViewError.Rows)
   {
      try
      {
        dataGridViewError.Rows.Remove(row);
      }
      catch (Exception) { }
   }
} while (dataGridViewError.Rows.Count > 1);
8 голосов
/ 08 января 2012

Вам необходимо очистить DataSource или DataTable, а не сетку данных.

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

или

dataTable.Clear();
dataGridView.Refresh();
7 голосов
/ 30 сентября 2013

Я использую

dataGridViewResult.Rows.Clear();

, чтобы очистить все строки без удаления столбцов.

3 голосов
/ 24 января 2013

Для той же проблемы я пробовал несколько способов, но не смог. Как сказано в одном из ответов:

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);
}
3 голосов
/ 08 января 2012

Если ваша сетка привязана к DataTable или другому источнику данных, вам нужно очистить ее, а не сетку, в противном случае метод Rows.clear () является правильным и наилучшим способом сделать это.

1 голос
/ 05 апреля 2019

Обнулить количество строк и столбцов и обновить набор данных.

dataGrid.Rows.Count = 0; 

dataGrid.Refresh();

1 голос
/ 08 сентября 2015

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

1 голос
/ 22 марта 2015

// это должно работать

int rowCount = dataGridView1.Rows.Count;

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

Ваше решение не сработало, потому что каждый раз, когда цикл for проверяет условие i < rowCount, rowCount уже уменьшалось бы на единицу в результате dataGridView1.Rows.RemoveAt(i). Таким образом, только половина строк была бы удалена.

0 голосов
/ 06 марта 2015
int rowCount = dtg.Rows.Count;
        for (int i = rowCount - 1; i >= 0; i--)
        {
            DataGridViewRow dr = dtg.Rows[i];
            dtg.Rows.Remove(dr);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...