实时DataGridView?

时间:2011-10-23 20:41:59

标签: .net winforms datagridview

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

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行中的数据已更改,则该单元格会在几秒钟内更改颜色,对于任何其他已更改的单元格也会相同。 这基本上是一个实时应用程序,用于显示发生的变化 非常感谢

1 个答案:

答案 0 :(得分:5)

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

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

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

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

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

  3. 将BindingSource的.DataSource属性设置为BindingList<YourBusinessObject>。在您的代码中,您应该在此BindingList中添加和删除项目。通过这样做,DataGridView将在列表更新时自动添加和删除网格中的行。
  4. 还有两件事:

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