我有一个DataGrid
,绑定到List
:_bhaList
。
现在,我编写了一种方法,该方法将允许用户在网格上选择一个项目并将其向上移动。随着其向上移动,No.
列将更新以显示其当前位置。但是,在这种特殊情况下,我有3个项目,如果我选择No. 2
并将其向上移动,它的确会切换为No. 1
的位置,并且这些数字会更新,但是No. 3
会变为4。重复此过程,新的No. 4
将更改为5。
这是我尝试过的代码:
var oldIndex = grdBha.SelectedIndex;
var newIndex = oldIndex - 1;
var bha = _bhaList[oldIndex];
_bhaList.RemoveAt(oldIndex);
bha.Number = oldIndex;
_bhaList.Insert(newIndex, bha);
for (var i = newIndex + 1; i <= _bhaList.Count; i++)
{
if (i != _bhaList.Count)
{
_bhaList[i].Number += 1;
}
}
我在
for
循环中尝试了不同的变体,但没有成功。我感觉这将是一件非常简单的事情,但我的想法只是没有看到它。
最佳答案
您的问题是,在这种情况下,只有两个项目的“顺序已更改”,但是您增加了该项目下方每个人的人数。在这种情况下,Bit X/O Sub
是3,但是增加到4。
您知道只涉及两个索引:
// swap the two
var temp = _bhaList[newIndex];
_bhaList[newIndex] = _bhaList[oldIndex];
_bhaList[oldIndex] = temp;
_bhaList[newIndex].Number = newIndex + 1;
_bhaList[oldIndex].Number = oldIndex + 1;