首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实时DataGridView?

实时DataGridView?
EN

Stack Overflow用户
提问于 2011-10-24 04:41:59
回答 1查看 8.1K关注 0票数 3

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

代码语言:javascript
复制
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行中的数据已更改,则该单元格的颜色会更改几秒钟,并且对任何其他更改的单元格也是如此。这基本上是一个实时应用程序,用于在发生更改时显示它们。

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-31 23:43:56

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

  1. 如果您还没有这样做,您应该使用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将自动更新单元格。

  • 将BindingSource的.DataSource属性设置为BindingList<YourBusinessObject>。在您的代码中,您应该在此BindingList中添加和移除项。这样,在更新列表时,DataGridView将自动在网格中添加和删除行。

另外两件事:

  1. 支持“嘿看!”颜色改变功能,您可能需要更深入地挖掘一下。实际上,窗体中的代码应该监视列表中每一项的PropertyChanged事件。当事件被引发时,您将需要查找其.DataBoundItem属性等于业务对象上更改的属性的DataGridViewRow,然后查找绑定到更改的属性的单元格。一旦找到要“刷新”的单元格,就可以将该单元格添加到要临时突出显示的单元格列表中,并相应地更改CellStyle。最后,你需要一个定时器来定期清除或修剪这个列表,将CellStyle恢复到原来的样式。
  2. 如果项目是在后台线程上更新的,你可能会遇到BindingListthreading issues。您可以通过将BindingList替换为ThreadedBindingList来解决此问题。请参阅:How do you correctly update a databound datagridview from a background thread.
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7869040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档