我有数据网格视图,其数据源是c#中的数据表, 如何让它连续从数据库中读取表格 我的意思是如果我的程序在同一网络中的许多计算机上运行并连接到同一个数据库,如果计算机1向数据库添加行,它将自动出现在计算机2中而不单击任何按钮进行刷新。
void load()
{
c.connect("sel_dep");
c.com.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da=new SqlDataAdapter (c.com);
DataTable dt = new DataTable();
c.open();
int last = 0;
while (true)
{
if (dt.Rows.Count > 0)
dt.Rows.Clear();
da.Fill(dt);
dd = dt;
if (dt.Rows.Count != last)
{
last = dt.Rows.Count;
this.Invoke((MethodInvoker)delegate { dataGridView1.DataSource = dt; dataGridView1.SelectedRows[0].Selected = true; label1.Text = dataGridView1.RowCount.ToString(); });
}
}
c.close();
}
private void Form3_Load(object sender, EventArgs e)
{
aa = new Thread(() => { load(); });
aa.Start();
}
这是我的托盘
答案 0 :(得分:0)
如果你正在使用Sql Server,你可以查看Query Notifications,更具体地说是SqlDependency类。它可用于在数据更改时从sql server获取通知到您的桌面应用程序
基于Service Broker基础架构,查询通知 允许应用程序在数据发生变化时得到通知。此功能 对于提供缓存的应用程序特别有用 来自数据库(例如Web应用程序)的信息,并且需要 在源数据发生变化时通知。
答案 1 :(得分:0)
如果您使用Winforms创建桌面应用程序,则不需要timer
。
只需在设计模式下从表单上的工具箱中拖放Timer
控件即可。
' The form load should be altered as below
private void Form3_Load(object sender, EventArgs e)
{
' Assume the Timer control is named as 'oTimer'
oTimer.Enabled = true;
oTimer.Interval = 60000; ' In Milliseconds, equates to 1 minute
oTimer.Start();
}
为Tick
创建Timer
事件。每当间隔过去时,都会触发此事件。
private void oTimer_Tick(object sender, EventArgs e)
{
<Call your function to initiate/refresh the DataGrid.DataSource within this event>
}
为了进一步了解Timer
类的工作原理,请参阅Timer Class (System.Windows.Forms)。
另请参阅Stackoverlow问题Winforms Timer for Dummies,其中包含掌握Timer
控件的大量资源和提示。