【问题标题】:Real-Time DataGridView?实时数据网格视图?
【发布时间】:2011-10-23 20:41:58
【问题描述】:

我正在寻找说明如何使用数据网格视图来显示存储在业务对象中的快速变化数据的教程或示例。这是一个例子: 假设我有以下课程:

public class StockPosition    
{  
   public string Ticker;  
   public double CurrentPrice;
   public double CurrentPosition;
   public double CurrentValue;  
}

public class CustomerPortfolio
{
    public string Name;
    public double TotalValue;
    public IList<StockPosition> StockPositions;
}

现在,我有一个在 gui 线程之外运行的线程,它接收头寸和价格更新,并更新 CurrentPrice、CurrentValue 和 TotalValue 字段。这些更新可能每隔几毫秒发生一次。

屏幕只需要每 250 毫秒显示一次更新。
我还想检查哪些单元格发生了变化。 我想知道哪些单元格发生了变化,以便特定单元格在片刻内获得新颜色。 例如,如果第 5 列第 2 行中的数据已更改,则该单元格会在几秒钟内更改颜色,并且对于任何其他更改的单元格都相同。 这基本上是一个实时应用程序,用于显示发生的变化。
非常感谢

【问题讨论】:

  • 在这种情况下使用“实时”这个词很麻烦,你在谈论人类的感知而不是这个词的真正含义。创造幻觉完全取决于您,我们不知道您的客户认为什么是“实时的”。 programmers.stackexchange.com/questions/74585/…

标签: .net winforms datagridview


【解决方案1】:

要支持此功能,您应该使用 WinForms 的 数据绑定 功能自动为您完成大部分操作。

  1. 如果您还没有,您应该使用BindingSource 来使用设计器将网格中的列绑定到您的业务对象。简而言之:

    一个。 创建项目数据源参见:http://www.telerik.com/help/openaccess-orm/openaccess-tasks-howto-object-data-source.html

    b. 将 DataGridView 的 DataSource 属性设置为该数据源。这将在您的表单上自动创建一个BindingSource(在设计器的下托盘中)。它还会自动为每个属性创建一个列,然后您可以根据需要对其进行修改。

  2. 您的业务对象类应该实现 INotifyPropertyChanged。有关如何执行此操作的示例,请参阅http://msdn.microsoft.com/en-us/library/ms743695.aspx。通过这样做,DataGridView 将在后台线程更改业务对象时自动更新单元格。

  3. 将 BindingSource 的 .DataSource 属性设置为 BindingList&lt;YourBusinessObject&gt;。在您的代码中,您应该在此 BindingList 中添加和删除项目。通过这样做,DataGridView 将在列表更新时自动在网格中添加和删除行。

还有两件事:

  1. 支持“嘿看!”颜色更改功能,您可能需要更深入地挖掘。本质上,表单中的代码应该监视列表中每个项目的PropertyChanged 事件。引发事件时,您需要找到DataGridViewRow.DataBoundItem 属性等于您的业务对象上更改的属性,然后找到绑定到更改属性的单元格。一旦找到要“闪烁”的单元格,就可以将该单元格添加到要临​​时突出显示的单元格列表中,相应地更改CellStyle。最后,您将需要一个计时器来定期清除或修剪此列表,将 CellStyle 恢复为原始样式。
  2. 如果在后台线程上更新项目,您可能会遇到BindingList线程问题。您可以通过将 BindingList 替换为 ThreadedBindingList 来解决此问题。请参阅:How do you correctly update a databound datagridview from a background thread

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多