在刷新c#数据网格时停止行跳转

本文关键字:网格 刷新 数据 数据网 | 更新日期: 2023-09-27 18:13:51

我们在数据网格上显示我们的数据,绑定到一个数据集,该数据集又从服务器上的Progress数据库提供。在处理过程中,我们需要对数据集进行更改,并从服务器刷新它的值。到目前为止,一切顺利,没有问题。

问题是,当我们返回新数据时,我们希望数据网格中的选择保持在它之前所在的同一行。我们用下面的代码来处理这个问题:

int iPostingPos = dgridPostings.CurrentRow.Index;
// process data on server
dataContTranMatch.RunBoProcedure(dataContTranMatch.BoProcedure, 
transactionMatchingDataSet);
// Reload Data
LoadData();
if (iPostingPos > ttPOSTingsRowBindingSource.Count)
{
    iPostingPos = ttPOSTingsRowBindingSource.Count;
}
if (ttPOSTingsRowBindingSource.Count > 0)
{
    ttPOSTingsRowBindingSource.Position = iPostingPos;
    dgridPostings.Rows[iPostingPos].Selected = true;
}

这个方法可以工作,但是我们让选定的行在屏幕上跳来跳去,这真的很烦人。

例如,如果您选择第7行,然后运行此代码,您选中了第7行,然后选择跳转到第0行,然后跳转回第7行。这是不可接受的。

为了解决这个问题,我们尝试在以下附加行中包含上述代码:

chTableLayoutPanel1.SuspendLayout();
*DO CODE*
chTableLayoutPanel1.ResumeLayout();

但这并没有帮助。

到目前为止,我们能够达到的最可接受的解决方案是改变选择的颜色,这样你就看不到它了,让它跳跃,然后把颜色放回原来的样子。这使得闪烁更容易被接受。

dgridPostings.RowsDefaultCellStyle.SelectionBackColor = 
SystemColors.Window;
dgridPostings.RowsDefaultCellStyle.SelectionForeColor = 
SystemColors.ControlText;
DO CODE
dgridPostings.RowsDefaultCellStyle.SelectionBackColor = 
SystemColors.Highlight;
dgridPostings.RowsDefaultCellStyle.SelectionForeColor = 
SystemColors.HighlightText;

我们认为这个问题是由于绑定源在数据集刷新时暂时为空引起的,然后我们重新导航其中有数据的源。

有谁能提供一些关于我们如何防止这种不愉快的闪烁发生的想法吗?

多谢科林

在刷新c#数据网格时停止行跳转

这可能有点笨拙,但一个选择是暂停绘制控件。一个用户问如何在这里实现这一点:我如何暂停绘画控件和它的孩子。我在这里使用了选择的答案来达到类似的效果。