在刷新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;
我们认为这个问题是由于绑定源在数据集刷新时暂时为空引起的,然后我们重新导航其中有数据的源。
有谁能提供一些关于我们如何防止这种不愉快的闪烁发生的想法吗?
多谢科林
这可能有点笨拙,但一个选择是暂停绘制控件。一个用户问如何在这里实现这一点:我如何暂停绘画控件和它的孩子。我在这里使用了选择的答案来达到类似的效果。