我正在寻找教程或示例,展示如何使用数据网格视图来显示存储在业务对象中的快速变化的数据。下面是一个例子:假设我有以下类:
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字段。这些更新可能每隔几毫秒发生一次。
屏幕只需要每250ms显示一次更新。
我还想检查哪些细胞发生了变化。我想知道哪些单元格发生了更改,以便该特定单元格在一段时间内获得新的颜色。例如,如果第5列、第2行中的数据已更改,则该单元格的颜色会更改几秒钟,并且对任何其他更改的单元格也是如此。这基本上是一个实时应用程序,用于在发生更改时显示它们。
非常感谢
发布于 2011-10-31 23:43:56
要支持此功能,您应该使用WinForms的数据绑定特性自动为您完成大部分操作。
BindingSource来使用设计器将网格中的列绑定到业务对象。简而言之:a. 创建项目数据源请参阅:http://www.telerik.com/help/openaccess-orm/openaccess-tasks-howto-object-data-source.html
b. 将DataGridView的DataSource属性设置为该数据源。这将自动在您的窗体上创建一个BindingSource (在设计器的下部托盘中)。它还会自动为每个属性创建一列,然后您可以根据需要对其进行修改。
INotifyPropertyChanged.有关如何做到这一点的示例,请参阅http://msdn.microsoft.com/en-us/library/ms743695.aspx。这样,当业务对象被后台线程更改时,DataGridView将自动更新单元格。
.DataSource属性设置为BindingList<YourBusinessObject>。在您的代码中,您应该在此BindingList中添加和移除项。这样,在更新列表时,DataGridView将自动在网格中添加和删除行。另外两件事:
PropertyChanged事件。当事件被引发时,您将需要查找其.DataBoundItem属性等于业务对象上更改的属性的DataGridViewRow,然后查找绑定到更改的属性的单元格。一旦找到要“刷新”的单元格,就可以将该单元格添加到要临时突出显示的单元格列表中,并相应地更改CellStyle。最后,你需要一个定时器来定期清除或修剪这个列表,将CellStyle恢复到原来的样式。BindingList的threading issues。您可以通过将BindingList替换为ThreadedBindingList来解决此问题。请参阅:How do you correctly update a databound datagridview from a background thread.https://stackoverflow.com/questions/7869040
复制相似问题