数字增量太多

时间:2013-09-12 17:00:01

标签: c# list datagrid

我有一个DataGrid,绑定到List_bhaList

enter image description here

现在,我编写了一个方法,允许用户选择网格上的项目并将其向上移动。随着它向上移动,No.列会更新以显示其当前位置。但是,在这种特殊情况下,如果我有3个项目,如果我选择No. 2,然后将其向上移动,则会切换No. 1个地方,并且这些数字会更新,但No. 3会更改为4.如果我重复此过程,新No. 4将更改为5.

enter image description here

以下是我尝试过的代码:

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循环中尝试了不同的变体,但没有成功。

我觉得这将是非常简单的事情,但我的思想却没有看到它。

5 个答案:

答案 0 :(得分:2)

您的问题是,在这种情况下,只有两个项目的“订单已更改”,但您为项目移动时 以下的每个人增加了数量。在这种情况下,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;

答案 1 :(得分:0)

如果你的物品一次只能移动一个点,则不需要循环,可以用以下内容替换:

_bhaList[oldIndex].Number++;

答案 2 :(得分:0)

您只需要重新洗牌/交换位置,

当你_bhaList.Insert(newIndex, bha);时,它会将计数增加1。

只能replacing这两个选定的索引。

答案 3 :(得分:0)

你的for循环没有意义,你不需要增加每个项目的数量。如果在列表中添加新项目,则只需执行此操作。

var oldIndex = grdBha.SelectedIndex;
var newIndex = oldIndex - 1;
var oldBha = _bhaList[oldIndex];
var newBha = _bhaList[newIndex];

oldBha.Number--;
newBha.Number++;

_bhaList.RemoveAt(oldIndex);
_bhaList.Insert(newIndex, oldBha);

_bhaList[oldIndex] = newBha;
_bhaList[newIndex] = oldBha;

答案 4 :(得分:0)

使用

_bhaList.RemoveAt(oldIndex);

bha.Number = oldIndex;

_bhaList.Insert(newIndex, bha);

您已将项目移至新索引。 .NET将根据需要推送所有其他元素,而无需您这样做。因此,不需要for循环。

要解决您的问题,只需删除for循环。