Подтвердить что ты не робот

Как очистить представление сетки данных

Я пытаюсь заполнить DataGridView на основе выбранного элемента в ComboBox, у меня есть эта часть.

Однако мне нужно очистить сетку перед добавлением новых данных из нового элемента, а не просто добавлением в конец.

Как очистить DataGridView перед добавлением в него элементов?

4b9b3361

Ответ 1

Во-первых, нуль источника данных:

this.dataGridView.DataSource = null;

Затем очистите строки:

this.dataGridView.Rows.Clear();

Затем установите источник данных в новый список:

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

Ответ 2

Если он привязан к источнику данных -

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

Работал для меня.

Ответ 3

Вы можете очистить DataGridView таким образом

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

Если это databound, попробуйте это

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

Ответ 4

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

Ответ 5

Если вы хотите очистить не только данные, но и комбобокс, флажки, попробуйте

dataGridView.Columns.Clear();

Ответ 6

Вы можете назначить источник данных как нуль вашей сетки данных и затем восстановить его.

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

Ответ 7

Вы можете выполнить следующую инструкцию и выполнить работу с отсутствием производительности. Если вы хотите увидеть эффект от этого, поставьте одну из двух следующих инструкций (технически подобранных), где вам нужно очистить DataGridView до try {} catch (...) {} окончательно и ждать, что происходит.

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

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

Вы улучшаете эту задачу, но ее недостаточно, возникает проблема с reset DataGridView из-за колоний, которые остаются в объекте DataGridView. Наконец, я предлагаю, лучший способ, который я реализовал в своей домашней практике, - обработать этот 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(); где вам нужно его использовать, но рекомендуется, когда вы делаете запросы и меняете более чем несколько таблиц, которые будут загружаться с именами заголовков diferents в файле grieView. Но если вы хотите сохранить заголовки здесь, это решение.

Ответ 8

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

Ответ 9

Если вы хотите очистить все заголовки, а также данные, например, если вы переключаетесь между 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; 

Ответ 10

обновить datagridview и обновить datatable

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

Ответ 11

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

Ответ 12

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

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

Ответ 13

Решение:

dataGridView1.Rows.RemoveAt(0);

Очищает сетку и сохраняет столбцы.

Ответ 14

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

Ответ 15

Это работает ко мне

'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

Решение:

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