【问题标题】:How do you update a datagridview in C# every minute如何每分钟更新 C# 中的 datagridview
【发布时间】:2009-03-02 20:49:20
【问题描述】:

我目前正在使用 C# 编写一个非常简单的项目。

我有一个状态框、两个按钮和一个 dataGridView。

当表单加载时,dataGridView 被正确填充。

然后我想做的是每 45 秒更新一次该表,以反映数据库中的任何更改。

我正在寻找有关实现此目标的技术的建议。我一直在寻找明确的信息,但似乎有些缺乏。

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:
    1. Timer 控件添加到您的表单。 (属于组件类别)
    2. 将其Interval 属性设置为45000(该值表示毫秒)
    3. 在表单设计器或代码中的某个位置将计时器的Enabled 属性设置为True
    4. 为计时器的Tick 事件添加一个处理程序(您可以通过双击计时器来获得)
    5. Tick 处理程序中,更新您的dataGridView

    您的处理程序将如下所示:

    private void timer1_Tick(object sender, EventArgs e)
    {
        // Update DataGridView
    }
    

    如果由于某种原因需要暂停更新,可以调用timer1.Stop() 停止计时器运行,并使用timer1.Start() 重新启动它。

    【讨论】:

      【解决方案2】:

      像其他人建议的那样,使用计时器重新查询数据库。我唯一要补充的是,当您重新查询数据库时,不要只将 DataGridView 的数据源设置为新表。而是将其与现有表合并。这样做的原因是,如果用户位于网格中间,例如查看特定行,如果将 DataSource 重置为新表,则整个网格将刷新,它们将失去位置。烦死人了!如果你合并它,它对用户来说将是无缝的。

      DataTable.Merge

      使用 Merge 方法时要注意的一件事是表需要有一个主键。仔细检查以确保 DataTable 本身具有主键。它并不总是将其从数据库中拉回。您可能需要执行以下操作:

      table.PrimaryKey = new DataColumn[] {table.Columns["ID"]};
      

      【讨论】:

      • @BFree:这是一个很好的提示。这也可以翻译成 ASP.NET 中的 GridView 吗?
      • 我不是 ASP.NET 方面的专家,但根据我有限的理解,您是否必须回发才能再次访问数据库?这不会导致他们失去自己的位置吗?也许您可以在回发之前以某种方式缓存当前选择的行,然后为用户再次选择该行...不确定...
      • @BFree:你必须回发,我只是希望这是某种隐藏的宝石,以防止 GridView 回滚到顶部。我知道 MaintainScrollPosition,但它在可滚动的 div 中效果不佳。
      【解决方案3】:

      使用计时器控件,然后以您需要的特定增量执行更新。

      【讨论】:

      • 注意:定时器控件的增量可以在属性中设置。然后,如果您双击该控件,您可以访问您需要的特定事件处理程序。
      【解决方案4】:

      您可以创建一个每 45 秒触发一次的 Timer,并从其事件处理程序更新您的 UI。

      【讨论】:

        【解决方案5】:

        你的意思是我应该在 Timer 事件处理程序中再次绑定 datagridview ?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-07-19
          • 1970-01-01
          • 1970-01-01
          • 2020-06-23
          • 1970-01-01
          • 2023-03-30
          • 1970-01-01
          相关资源
          最近更新 更多