我有一个 DataGridView,它将显示数据库中的记录(日志条目)。一次可以存在的记录量非常大。我想使用 DataGridView 的虚拟模式功能来显示数据页,并最大限度地减少给定时间必须通过网络传输的数据量。
轮询数据是不可能的。一次将有多个客户端运行,所有客户端都位于同一网络上并查看记录。如果它们都轮询数据,网络将运行非常慢。
数据对用户来说是只读的;他们无法编辑任何内容,只能查看。我需要知道数据库中何时发生更新,并且我需要使用虚拟模式相应地使用这些更新来更新屏幕。如果用户正在查看的数据页面包含已更改的数据,他/她将在该页面上看到这些更新。如果对数据库中的数据进行了更新,但对用户正在查看的数据进行了更新,则用户屏幕上实际上不会发生太大变化(如果添加或删除记录,可能只是滚动条)。
我当前的方法是使用 SQL Server 更改跟踪和同步框架。每个客户端都有一个本地 SQL Server CE 实例和与主数据库服务器保持同步的数据库文件。我使用同步事件中的信息来查看是否对主数据库进行了任何更改并同步到客户端。我需要在这里使用 DataGridView 虚拟模式,因为我不能一次将数千条记录加载到 DataGridView 中,否则内存使用量会急剧增加。
目前的主要挑战是了解如何使用虚拟模式通过允许用户上下滚动记录来为用户提供无缝体验,并在不不当干扰用户的情况下动态更新记录。以前有人处理过这个问题吗?如果是的话,我在哪里可以看到他们是如何做到的?我已经浏览了一些有关虚拟模式的 MSDN 文档和示例。到目前为止,我还没有在他们的网站上找到解释如何完成我想要完成的任务的文档和/或示例。
添加以下内容以形成启动
dataGridView1.CellValueNeeded +=new DataGridViewCellValueEventHandler( dataGridView1_CellValueNeeded );
dataGridView1.VirtualMode = true;
在您收到更新的地方使用以下代码
dataGridView1.RowCount = (int)rowscount.TotalCount;
添加以下功能:
private void dataGridView1_CellValueNeeded( object sender, DataGridViewCellValueEventArgs e )
{
_cache.LoadPage( e.RowIndex );
int rowIndex = e.RowIndex % PageSize;
e.Value = datatable.rows[rowIndex][e.ColumnIndex];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)