C# 如何为新存储的数据刷新datagridview?
大家好,我有一个DataGridView,里面有两列,FullName和VoteCount。我想刷新DataGridView,以了解数据库中的更改。如何在不关闭表单或单击任何按钮的情况下刷新DatagridView?可能吗 这是我的密码:C# 如何为新存储的数据刷新datagridview?,c#,winforms,sql-server-2008,C#,Winforms,Sql Server 2008,大家好,我有一个DataGridView,里面有两列,FullName和VoteCount。我想刷新DataGridView,以了解数据库中的更改。如何在不关闭表单或单击任何按钮的情况下刷新DatagridView?可能吗 这是我的密码: private void President() { sc.Open(); cmd = new SqlCommand("SELECT (LastName + ', ' + FirstName + ' ' + Mi
private void President()
{
sc.Open();
cmd = new SqlCommand("SELECT (LastName + ', ' + FirstName + ' ' + MiddleName) as FullName,Vcount as VoteCount FROM TableVote WHERE Position='President'", sc);
try
{
_da = new SqlDataAdapter();
_da.SelectCommand = cmd;
DataTable _dt = new DataTable();
_da.Fill(_dt);
BindingSource bs = new BindingSource();
bs.DataSource = _dt;
PresDG.DataSource = bs;
_da.Update(_dt);
PresDG.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
PresDG.Columns["FullName"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
PresDG.Columns["VoteCount"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
PresDG.Columns["VoteCount"].Width = (100);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sc.Close();
}
}
我认为您必须重新填充完整的DataGridView 方式:
您的数据库是否经常更新?如果是这样,您可以使用计时器进行定期更新。您可以使用Sql server CLR集成。 我将张贴在更多的细节后,一点阅读,但我希望它可以给你一个方向,直到那或你可能会找到你的解决方案 更新 您可以创建一个触发器应用程序,并使用该触发器应用程序调用绑定gridview的方法。 这是一个编写触发器并实现它的好例子 有两种情况:
- 如果经常刷新datagridview,则将计时器设置为 更新结果
- 如果在插入或更新操作后刷新,则在 操作结束时,请调用绑定方法
string connectionString = "SERVER=" + server + ";" + "DATABASE=" +
database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
MySqlConnection conn = new MySqlConnection(connectionString);
MySqlDataAdapter adptr = new MySqlDataAdapter("Select * FROM " + tableName, conn);
DataTable tabloSql = new DataTable();
adptr.Fill(tabloSql);
dataGridView1.DataSource = tabloSql;
注意:如果您的程序没有对数据表进行更改,请执行此操作。
如果在刷新数据表时对datatable进行了更改,则对datatable所做的更改将被删除在需要刷新数据时调用此函数
YourGrid.DataSource = Refresh("SELECT...");
private BindingSource Refresh(string sql)
{
try
{
using (var da = new SqlDataAdapter(sql, new SqlConnection(Properties.Settings.Default.ConnectionString)) { FillLoadOption = LoadOption.Upsert })
{
da.SelectCommand.Connection.Open();
da.Fill(dataSet.YourTable);
}
}
catch(Exception ex) { MessageBox.Show(ex.Message); }
return new BindingSource(dataSet, "YourTable");
}
我想你可以在另一个线程中完成,每隔几分钟左右就会触发一些方法。明白了,谢谢,哈哈,我的投票系统已经完成了……)