it-swarm.com.ru

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

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

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

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

36
Wizard

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

this.dataGridView.DataSource = null;

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

this.dataGridView.Rows.Clear();

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

this.dataGridView.DataSource = this.GetNewValues();
75
Trevor Pilley

Если это связано с источником данных -

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

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

10
Jon649

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

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

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

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

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

dataGridView.Columns.Clear();
5
nate wew
DataGrid.DataSource = null;
DataGrid.DataBind();
5
Pankaj Agarwal

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

dg.DataSource = null;
dg.DataBind();
3
Rohit Vyas

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

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

     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. Но если вы хотите сохранить заголовки, здесь есть решение.

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

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

Если вы хотите очистить все заголовки, а также данные, например, если вы переключаетесь между 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; 
1
valhalla
dataGridView1.Rows.Clear();
dataGridView1.Refresh();
1
Asif
datatable.Clear();
dataGridView1.DataSource = datatable;
0
HarshPritesh

Для того, чтобы иметь сетку данных, у вас должен быть метод, который форматирует вашу сетку данных. Если вы хотите очистить 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

0
Ismail Gunes

обновить представление данных и обновить данные

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