C# 如何刷新DataGridView?
我试图在表单关闭事件中强制DataGrid刷新其内容。我尝试过各种方法,在这个论坛上寻找答案,但仍然找不到解决办法 这就是我的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
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;
}