C# 如何刷新DataGridView?

C# 如何刷新DataGridView?,c#,datagridview,C#,Datagridview,我试图在表单关闭事件中强制DataGrid刷新其内容。我尝试过各种方法,在这个论坛上寻找答案,但仍然找不到解决办法 这就是我的DataGridView的填充方式: string strCon = ConfigurationManager.ConnectionStrings["ST"].ConnectionString.ToString(); string strSQL = "SQL QUERY"; SqlDataAdapter dataAdapter = new SqlDataAdapter(s

我试图在表单关闭事件中强制DataGrid刷新其内容。我尝试过各种方法,在这个论坛上寻找答案,但仍然找不到解决办法

这就是我的DataGridView的填充方式:

string strCon = ConfigurationManager.ConnectionStrings["ST"].ConnectionString.ToString();
string strSQL = "SQL QUERY";
SqlDataAdapter dataAdapter = new SqlDataAdapter(strSQL, strCon);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
DataTable table = new DataTable();
table.Locale = System.Globalization.CultureInfo.InvariantCulture;
dataAdapter.Fill(table);
bindingSource1.DataSource = table;
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
dataGridView1.ReadOnly = true;
dataGridView1.DataSource = bindingSource1;
我尝试了Invalidate方法BindingSource.ResetBindings,但GridView仍然没有刷新。如何强制刷新它?

数据刷新 我想你说的是数据刷新。在这种情况下,您可以将
DatagridView
重新绑定到源:

DataGridView dataGridView1 = new DataGridView();
dataGridView1.DataSource = aDataSource;

//Update Data in aDataSource
//...

dataGridView1 = null;
dataGridView1.DataSource = aDataSource;
在代码快照中,
aDataSource
实际上应该是
bindingSource1
。正如@GIVE-ME-CHICKEN所提到的,在您的情况下,您应该将重新绑定包含在适当的回调中,以将其附加到正确的事件:

 private void Form1_FormClosing(object sender, FormClosingEventArgs e){ ... }
数据刷新 如果不想重新绑定源代码,可以采用另一种解决方案:将
dataGridView1
绑定到可观察的集合。在这种情况下,实现接口将更改通知给其侦听器(您的
DataGridView
组件)就足够了

图形刷新 如果仅搜索图形刷新,则有一种特定方法:

dataGridView1.Refresh();

你能试着改变这一行吗

bindingSource1.DataSource = table;


也许像这样做会有帮助

public DataTable GetData(string SQLQuery)
{
   string strCon = ConfigurationManager.ConnectionStrings["ST"].ConnectionString.ToString();
   string strSQL = "SQL QUERY";
   SqlDataAdapter dataAdapter = new SqlDataAdapter(strSQL, strCon);
   SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
   DataTable table = new DataTable();
   table.Locale = System.Globalization.CultureInfo.InvariantCulture;
   dataAdapter.Fill(table);
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
   //Maybe only one of the clear code works.
   dataGridView1.Rows.Clear();
   dataGridView1.DataSource = null; 

   BindingSource bindingSource1 = new BindingSource();
   bindingSource1.DataSource = GetData("SQL QUERY");
   dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
   dataGridView1.ReadOnly = true; //<-----------Try taking this off aswell
   dataGridView1.DataSource = bindingSource1;
}
公共数据表GetData(字符串SQLQuery) { string strCon=ConfigurationManager.ConnectionStrings[“ST”].ConnectionString.ToString(); 字符串strSQL=“SQL查询”; SqlDataAdapter dataAdapter=新的SqlDataAdapter(strSQL,strCon); SqlCommandBuilder commandBuilder=新的SqlCommandBuilder(dataAdapter); DataTable=新的DataTable(); table.Locale=System.Globalization.CultureInfo.InvariantCulture; dataAdapter.Fill(表); } 私有作废Form1\u FormClosing(对象发送方,FormClosingEventArgs e) { //也许只有一个清晰的代码有效。 dataGridView1.Rows.Clear(); dataGridView1.DataSource=null; BindingSource bindingSource1=新的BindingSource(); bindingSource1.DataSource=GetData(“SQL查询”); dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsCeptheader);
dataGridView1.ReadOnly=true;//谢谢您的回答。非常感谢。您能澄清一下应该是什么新闻吗?对不起,我编辑了答案以避免混淆(因为不需要引入新变量).
aDataSource
应该是正确更新后的
bindingSource1
。在中查看一下
GetData
,我认为它确实满足了您的需要。诀窍是,再次绑定数据源。对不起,兄弟,但这根本没有帮助。
public DataTable GetData(string SQLQuery)
{
   string strCon = ConfigurationManager.ConnectionStrings["ST"].ConnectionString.ToString();
   string strSQL = "SQL QUERY";
   SqlDataAdapter dataAdapter = new SqlDataAdapter(strSQL, strCon);
   SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
   DataTable table = new DataTable();
   table.Locale = System.Globalization.CultureInfo.InvariantCulture;
   dataAdapter.Fill(table);
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
   //Maybe only one of the clear code works.
   dataGridView1.Rows.Clear();
   dataGridView1.DataSource = null; 

   BindingSource bindingSource1 = new BindingSource();
   bindingSource1.DataSource = GetData("SQL QUERY");
   dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
   dataGridView1.ReadOnly = true; //<-----------Try taking this off aswell
   dataGridView1.DataSource = bindingSource1;
}