Как очистить строки в DataGridView с помощью С#?

Следующая ошибка в этой строке.

datagridview1.Rows.Clear()

но эта строка дает ошибку:

Не удается удалить этот список.

Ответ 1

У меня также была аналогичная проблема, когда я пытаюсь очистить DataSource DataGridView после того, как привязал его к DataTable с помощью:

DataTable DT = ... ; // fill it
datagridview1.DataSource = DT;

когда я попытаюсь очистить строки позже с помощью следующего кода:

datagridview1.DataSource = null

Я получаю эту ошибку:

ERROR: Object reference not set to an instance of an object

Эта объектная ссылка Проблема ERROR уже решена в здесь. Но мне удалось решить мою собственную проблему (очистка строк DataGridView) с помощью этого кода:

DataTable DT = (DataTable)datagridview1.DataSource;
if (DT != null) 
    DT.Clear();

Я знаю, что этот вопрос был задан очень давно, но я надеюсь, что мое решение решит проблемы.

Ответ 2

private void button_Limpar_Click(object sender, EventArgs e)
{
    DataTable DT = (DataTable)dataGridView_Cidade.DataSource;
    if (DT != null)
        DT.Clear();
}
#endregion

Ответ 3

Является ли ваш DataGridView привязанным к DataSource, я думаю, поэтому он не позволяет вам очистить его с момента привязки к базовому DataTable или List.

вы можете попробовать установить для свойства DataSource значение null

datagridview1.DataSource = null; для очистки

Ответ 4

Вам нужно очистить данные, а не строки datagridview.

datagridview1.DataSource = null;

Другой способ -

1) Не назначайте прямой источник данных gridview. добавлять строки из datatable в gridview

      foreach (DataRow row in dataTable.Rows)
        {
            var dataGridRow = new DataGridViewRow();
            dataGridRow.CreateCells(datagridview1);

            for (int i = 0; i < row.ItemArray.Length; i++)
            {
                dataGridRow.Cells[i].Value = row.ItemArray[i];
            }

            datagridview1.Rows.Add(dataGridRow);
        }

затем используйте

datagridview1.Rows.Clear()

Ответ 5

Просто добавьте эту строку в начале вашего мероприятия:

dgv_nameOfGridView.DataSource=false;

Теперь каждый раз, когда вы нажимаете, он удаляет dgv..

Ответ 6

Вы можете использовать этот простой метод:

Сначала очистите свой DataTable, а затем обновите DataGridView

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

Надеемся на эту помощь

Ответ 7

Простое решение - очистить DataSet. ds.Clear();

Ответ 8

Поскольку вы используете связанную сетку, попробовали ли вы вызвать свою загрузку дважды и проверьте, что данные не удваиваются?

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

http://www.vbforums.com/showpost.php?s=aa5f116586c00a2d9ea15e3727fc5c2f&p=2841192&postcount=9

Ответ 9

Сначала очистите DataSource, а затем очистите DataGridView

в VB

 datagridview1.DataSource = Nothing
 datagridview1.Rows.Clear()

помощь надежда

Ответ 10

Если вы загрузите DataGridView с помощью параметра, вы можете отправить ему пустой параметр. Это очистит ваш DataGridView без необходимости устанавливать его DataSet в значение null.

Например, я загружаю DataGridView с кодом, когда я заполняю TextBox.

this.dataTable1TableAdapter.Fill(this.ds_MyDataSet.DataTable1, TextBox1.Text);

Если я хочу очистить его содержимое, то

this.dataTable1TableAdapter.Fill(this.ds_MyDataSet.DataTable1, "");

Ответ 11

Вот и мы 8 лет спустя.

Хотя

datagridview1.DataSource = null;

это удовлетворительный ответ для большинства, для меня это удаляет все настройки, которые я добавил в столбцы в режиме конструктора. Таким образом, скрытые столбцы появляются, если я хочу очистить строки.

Так что вместо того, чтобы убирать строки:

datagridview1.Rows.Clear()

Удалите DataTable или DataView, которые вы использовали для настройки DataGridView.

Итак, вот как я это сделал:

//Populate the datagridview
DataTable _DT = new DataTable();
BindingSource _BS = new BindingSource();

//Initially fill up your datatable with stuff
//You can call this method again if data needed to be changed
public void fillDT(int id) {
    _DT = fillUpDataTableWithStuffFromDB(id);

    _BS.DataSource = _DT.DefaultView;
    datagridview1.DataSource = _BS;
    _BS.ResetBindings(false);
}

//You can use this method to mimic the functionality above
//But rather fetching data, just clear out the datatable and pass it in
public void clearDT() {
    _DT.Clear();
    datagridview1.DataSource = _DT.DefaultView;
    datagridview1.Refresh();
}

Как вы можете видеть выше, я просто очистил таблицу данных и передал ее в таблицу данных. Это сохранило все мои свойства, которые я установил в столбце datagridview.

Ответ 12

У меня была та же проблема, которую я пробовал со многими решениями.

В конце я понял, что мы не можем очистить DataGridView, если мы используем его свойство "DGV.Datasource", потому что DGV берет свои данные из набора данных, поэтому вам нужно очистить строки DataTable

Dataset.Tables["TableName"].Rows.Clear();

Если вы используете эту функцию в Load of the Form, вам нужно добавить условие

if (DataSet.Tables["TableName"] !=null)    
    Dataset.Tables["TableName"].Rows.Clear();

или вы получите эту ошибку

Ссылка на объект не установлена ​​в экземпляр объекта.