Ответ 1
Во-первых, нуль источника данных:
this.dataGridView.DataSource = null;
Затем очистите строки:
this.dataGridView.Rows.Clear();
Затем установите источник данных в новый список:
this.dataGridView.DataSource = this.GetNewValues();
Я пытаюсь заполнить DataGridView на основе выбранного элемента в ComboBox, у меня есть эта часть.
Однако мне нужно очистить сетку перед добавлением новых данных из нового элемента, а не просто добавлением в конец.
Как очистить DataGridView перед добавлением в него элементов?
Во-первых, нуль источника данных:
this.dataGridView.DataSource = null;
Затем очистите строки:
this.dataGridView.Rows.Clear();
Затем установите источник данных в новый список:
this.dataGridView.DataSource = this.GetNewValues();
Если он привязан к источнику данных -
dataGridView.DataSource=null;
dataGridView.Rows.Clear();
Работал для меня.
Вы можете очистить DataGridView
таким образом
dataGridView1.Rows.Clear();
dataGridView1.Refresh();
Если это databound
, попробуйте это
dataGridView1.Rows.Clear() // If dgv is bound to datatable
dataGridView1.DataBind();
DataGrid.DataSource = null;
DataGrid.DataBind();
Если вы хотите очистить не только данные, но и комбобокс, флажки, попробуйте
dataGridView.Columns.Clear();
Вы можете назначить источник данных как нуль вашей сетки данных и затем восстановить его.
dg.DataSource = null;
dg.DataBind();
Вы можете выполнить следующую инструкцию и выполнить работу с отсутствием производительности. Если вы хотите увидеть эффект от этого, поставьте одну из двух следующих инструкций (технически подобранных), где вам нужно очистить 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. Но если вы хотите сохранить заголовки здесь, это решение.
dataGridView1.Rows.Clear();
dataGridView1.Refresh();
Если вы хотите очистить все заголовки, а также данные, например, если вы переключаетесь между 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;
обновить datagridview и обновить datatable
dataGridView1.Refresh();
datatable.Clear();
datatable.Clear();
dataGridView1.DataSource = datatable;
private void ClearGrid()
{
if(this.InvokeRequired) this.Invoke(new Action(this.ClearGrid));
this.dataGridView.DataSource = null;
this.dataGridView.Rows.Clear();
this.dataGridView.Refresh();
}
Решение:
dataGridView1.Rows.RemoveAt(0);
Очищает сетку и сохраняет столбцы.
YourGrid.Items.Clear();
YourGrid.Items.Refresh();
Это работает ко мне
'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);
}
}`
Решение:
while (dataGridView1.RowCount > 1)
{
dataGridView1.Rows.RemoveAt(0);
}