如果我在C#Win Forms应用程序中有两个DataGridView项,并且它们始终具有相同的列集,那么如何确保它们始终以相同的方式排序?
当一个网格或另一个网格排序时,我可以收到通知,但如果我尝试使用该通知以相同的方式对其他网格进行排序,则会出现堆栈溢出(原因很明显)。
我确信我可以通过一些丑陋的黑客来解决堆栈溢出问题,但我认为必须有一个正常的方法来做到这一点。当用户对它们进行排序时,我不能成为第一个需要保持两个DataGridView同步的人。
答案 0 :(得分:1)
我得到了堆栈溢出(原因很明显)。
如果没有示例代码,它们可能并不明显。您是否获得了堆栈溢出,因为每个更新通知都会更新另一个导致无限循环的网格?
那你为什么不跟鲍尔一样跟踪状态如下:
bool Grid1Fired = false;
bool Grid2Fired = false;
void handler_Grid1(..)
{
if(Grid1Fired == false && Grid2Fired == false)
{
Grid1Fired = true;
SortGrids();
}
}
void handler_Grid2(..)
{
if(Grid1Fired == false && Grid2Fired == false)
{
Grid2Fired = true;
SortGrids();
}
}
void SortGrids()
{
if(Grid1Fired)
{
// sort grid 2
}
else if(Grid2Fired)
{
// sort grid 1
}
Grid1Fired = false;
Grid2Fired = false;
}