【问题标题】:How do I display a digital timer (StopWatch) in datagridview column dynamically c#?如何在 c# 中动态显示 datagridview 列中的数字计时器(StopWatch)?
【发布时间】:2016-06-10 15:21:30
【问题描述】:

我有datagridview,它的数据源是datatable。

我在 datagridview 中有两列:

名字,及时

加载数据网格视图后,我想添加一个名为 DURATION 的新列,它是一个计时器列,即基于 IN TIME,DURATION 列应该显示一个秒表,时间跨度为 CURRENT TIME-IN TIME。

如何让 DURATION 列秒表像数字时钟一样每秒钟继续计时?

【问题讨论】:

  • 您的网格中有多少行?
  • @Steve 每 30 秒更新一次 datagridview。行不会超过二十
  • 是否需要装饰数字时钟或字符串hh:mm;ss每秒变化一次应该可以吗?
  • @Sakura Ya。这就是我需要的 hh:mm:ss
  • 这可以使用Timerdelegate 事件来完成。您能否发布有关 C# 数据结构以及如何将其绑定到 DGV 的代码?

标签: c# winforms datagridview timer stopwatch


【解决方案1】:

您可以将字符串列添加到DataTable 并将其用作持续时间列。然后你可以订阅一个定时器的Tick事件,你将它的间隔设置为1000,并在持续时间列中显示倒计时定时器的结果:

void timer_Tick(object sender, EventArgs e)
{
    foreach( DataRow row in YourDataTable.Rows)
    {
        var diff = row.Field<DateTime>("DateTimeColumn").Subtract(DateTime.Now);
        if(diff.TotalSeconds>0)
        {
            row["DurationColumn"] = string.Format("{0} d {1:D2}:{2:D2}:{3:D2}", 
                                       diff.Days, diff.Hours, diff.Minutes, diff.Seconds);
        }
        else
        {
            row["DurationColumn"] = "0 d 00:00:00";
        }
    }
}

【讨论】:

  • 我想在datagridview中显示持续时间的变化。
  • 以上代码执行您需要的操作。它在持续时间列的单元格中显示倒计时计时器,显示指定时间和现在之间的持续时间。计时器每秒更新单元格。
  • 我只是有一个疑问。分配后 datagridview.datasource=datatable;如果我对datatable进行任何更改,是否会立即反映在datagridview中
  • 当您更改DataTable 中的值时,更改将立即反映到DataGridViewDataTable 支持两种数据绑定方式。
  • 因为 IN TIME 总是小于 CURRENT TIME。 var inTime = row.Field("IN TIME"); var currentTime = DateTime.Now; var diff = currentTime - inTime;
猜你喜欢
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
相关资源
最近更新 更多