我正在尝试根据 ComboBox 中的选定项目填充 DataGridView,这部分正在工作。
但是,我需要能够在从新项目添加新数据之前清除网格,而不是仅仅添加到末尾。
如何在向 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();
如果您不仅要清除数据,还要清除组合框、复选框,请尝试
dataGridView.Columns.Clear();
DataGrid.DataSource = null;
DataGrid.DataBind();
您可以将数据源分配为数据网格的空值,然后重新绑定它。
dg.DataSource = null;
dg.DataBind();
你可以接受下一条指令,并且会在缺乏表现的情况下完成这项工作。如果您想查看其效果,请将需要清除 DataGridView 的 2 个 next 指令(技术上相似)之一放入 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 中加载不同标题名称的多个表时,建议使用它。但是,如果您想在此处保留标头,则可以提供解决方案。
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;
private void ClearGrid()
{
if(this.InvokeRequired) this.Invoke(new Action(this.ClearGrid));
this.dataGridView.DataSource = null;
this.dataGridView.Rows.Clear();
this.dataGridView.Refresh();
}
刷新datagridview并刷新数据表
dataGridView1.Refresh();
datatable.Clear();
datatable.Clear();
dataGridView1.DataSource = datatable;
要拥有 Datagrid,您必须有一个格式化 Datagrid 的方法。如果要清除 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 的名称
解决方案是:
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);
}
你可以接受下一条指令,并且会在缺乏表现的情况下完成这项工作。如果您想查看其效果,请将需要清除 DataGridView 的下一条指令放入 try{} catch(...){} finally 块并等待发生的情况。
while (dataGridView1.Rows.Count > 1)
{
dataGridView1.Rows.RemoveAt(0);
}
while (dataGridView1.Columns.Count > 0)
{
dataGridView1.Columns.RemoveAt(0);
}