c#datagridview在局域网中自动刷新

时间:2014-09-11 07:58:57

标签: c# mysql datagridview refresh lan

我是c#的初学者,有一个很大的问题。 前面有datagridview的应用程序(一个工作日的终端计划)可以在许多具有MS Windows Server和MySQL数据库的局域网中运行。 如何在所有其他PC上的一台工作站AUTOMATICALY上进行更改而不对它们执行任何操作(仅启动应用程序)。 我有一个数据和datagridview刷新的过程,我必须知道什么时候我必须启动这个过程,这意味着我必须知道什么时候任何其他工作站做了任何更改。 谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

一个简单的解决方案是使用计时器,当它过去时,你刷新gridview。所以在定义的时间段内它会自动刷新。问题可能是,如果您经常更新,那么访问数据库会出现过载。为了防止这种情况,您可以进行处理所有数据的服务应用程序

假设PC 1正在启动客户端应用程序。

  1. 首先它连接到服务器应用程序(服务器将客户端的引用存储在例如列表中)。

  2. 之后,PC1上的用户进行更改并单击“保存”,软件会将更改发送到服务器(例如,包含所有所需信息的自定义对象)。

  3. 服务器将更改保存到数据库

  4. Serverapplication会对特定客户做出回应,如果有效的话

  5. 如果有效,请将自定义对象(例如名为ChangesDoneEvent)发送给指示已完成更改的所有客户端。

    1. 所有已连接的客户端都将收到该对象,并且现在知道必须刷新其gridview。
  6. 有关详细信息,请搜索C#多线程服务器套接字编程。要通过网络发送自定义对象,您也可以在互联网上找到许多资源,这可能会对您有所帮助Sending and receiving custom objects using Tcpclient class in C#

答案 1 :(得分:1)

在表单上声明代表

public delegate void autocheck();
private System.Timers.Timer TTTimer = new System.Timers.Timer();

public void autofilldgv()
{
    if (this.InvokeRequired)
    {
      this.Invoke(new autocheck(UpdateControls));
    }
    else
    {
      UpdateControls();
    }
}
private void UpdateControls()
{
   //call your method here
  filldgv();

}
void TTTimer_Elapsed(object sender System.Timers.ElapsedEventArgs e)
{
  mymethod();
}
public void mymethod()
{
  //this method is executed by the background worker
  autofilldgv();
}
private void frm_receptionView_Load(object sender, EventArgs e)
{
  this.TTTimer.Interval = 1000; //1 sec interval
  this.TTTimer.Elapsed += new System.Timers.ElapsedEventHandler(TTTimer_Elapsed);
  this.TTTimer.Start();
}

答案 2 :(得分:0)

上面提供的解决方案实际上是处理此方案的好方法。在实施之前,您可能还想考虑潜在的后退。客户端PC的IP可能会发生变化,因为您正在使用套接字。列表中添加的对象引用可能是故障状态。您可能想要考虑处理这个陷阱。