实时DataGridView?

ahm*_*ori 3 .net datagridview winforms

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

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;
}
Run Code Online (Sandbox Code Playgroud)

现在,我有一个在gui线程外运行的线程,它接收位置和价格更新,并更新CurrentPrice,CurrentValue和TotalValue字段.这些更新可以每隔几毫秒发生一次.

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

Kev*_*ick 5

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

  1. 如果您还没有,则应使用a 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. .DataSourceBindingSource 的属性设置为a BindingList<YourBusinessObject>.在您的代码中,您应该在此BindingList中添加和删除项目.通过这样做,DataGridView将在列表更新时自动添加和删除网格中的行.

还有两件事:

  1. 支持"嘿看!" 换色功能,你可能需要深入挖掘一下.基本上,表单中的代码应该监视PropertyChanged列表中每个项目的事件.引发事件时,您将需要找到DataGridViewRow.DataBoundItem属性等于Business Object上更改的属性,然后找到绑定到已更改属性的单元格.一旦找到要"闪烁"的单元格,就可以将该单元格添加到要临​​时突出显示的单元格列表中,并相应地进行更改CellStyle.最后,您将需要一个定时清除我们或修剪此列表的计时器,将CellStyle恢复为原始样式.
  2. 如果在后台线程正在更新的项目,你可能会遇到线程问题BindingList.你可以用一个替换BindingList来解决这个问题ThreadedBindingList.请参阅:如何从后台线程正确更新数据绑定数据网格视图.