我正在寻找教程或示例,展示如何使用数据网格视图来显示存储在业务对象中的快速变化的数据。这是一个例子: 说我有以下课程:
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行中的数据已更改,则该单元格会在几秒钟内更改颜色,对于任何其他已更改的单元格也会相同。 这基本上是一个实时应用程序,用于显示发生的变化 非常感谢
答案 0 :(得分:5)
要支持此功能,您应该使用WinForms的数据绑定功能自动完成大部分功能。
如果您还没有,则应使用BindingSource
使用设计器将网格中的列绑定到业务对象。简而言之:
一个。 创建项目数据源请参阅:http://www.telerik.com/help/openaccess-orm/openaccess-tasks-howto-object-data-source.html
湾将DataGridView的DataSource属性设置为该数据源。这将自动在表单上创建BindingSource
(在设计器的下方托盘中)。它还会自动为每个属性创建一个列,然后您可以根据需要进行修改。
您的业务对象类应实现 INotifyPropertyChanged
。有关如何执行此操作的示例,请参阅http://msdn.microsoft.com/en-us/library/ms743695.aspx。通过这样做,DataGridView将在后台线程更改业务对象时自动更新单元格。
.DataSource
属性设置为BindingList<YourBusinessObject>
。在您的代码中,您应该在此BindingList中添加和删除项目。通过这样做,DataGridView将在列表更新时自动添加和删除网格中的行。还有两件事:
PropertyChanged
事件。引发事件时,您需要找到DataGridViewRow
属性等于您的业务对象上更改的属性的.DataBoundItem
,然后找到绑定到已更改属性的单元格。找到要“闪烁”的单元格后,您可以将该单元格添加到要临时突出显示的单元格列表中,相应地更改CellStyle
。最后,您需要一个定时清除我们或修剪此列表的计时器,将CellStyle恢复为原始样式。BindingList
的线程问题。您可以通过用ThreadedBindingList
替换BindingList来解决这个问题。请参阅:How do you correctly update a databound datagridview from a background thread。