我有一个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;

09-11 18:56