将项目从列表移动到列表?

时间:2011-08-29 23:08:27

标签: c# list datagridview move

我有两个标记为choiceDGVuniversalDGV的DataGridView,它们绑定到标记为choiceLineBindingSourceuniversalLineBindingSource的绑定源。

SortableBindingList<ChoiceLine> theChoiceList = new SortableBindingList<ChoiceLine>();
SortableBindingList<UniversalLine> theUniversalList = new SortableBindingList<UniversalLine>();

然后我使用foreach循环添加到每个列表中,迭代这个:

theChoiceList.Add(new ChoiceLine(item1, item2, item3, item4, item5, item6, item7, 
                                 item8, item9, item10, item11, item12, item13));

theUniversalList.Add(new UniversalList(stuff1, stuff2, stuff3, stuff4, stuff5, stuff6, stuff7, 
                                       stuff8, stuff9, stuff10, stuff11, stuff12, stuff13));

现在我致电: choiceSort();universalSort();。它们看起来像这样:

private void choiceSort()
{
    var sortedChoice = theChoiceList.OrderBy(l => l.Speed);
    choiceLineBindingSource.DataSource = sortedChoice;
}

private void universalSort()
{
    var sortedUniversal = theUniversalList.OrderBy(l => l.Type);
    universalLineBindingSource.DataSource = sortedUniversal;
}

修改

以下是移动项目的代码。

private void toUniversalButton_Click(object sender, EventArgs e)
{
    foreach (DataGridViewRow row in choiceDGV.SelectedRows)
    {
        object[] items = new object[row.Cells.Count];
        for (int i = 0; i < row.cells.Count; i++)
            items[i] = row.Cells[i].Value;

        theUniversalList.Add(new UniversalList(item1, item2, item3, item4, item5, item6, item7
                                               item8, item9, item10, item11, item12, item13));
        universalSort();

        choiceDGV.Rows.Remove(row);
    }
}

我的问题:

我还有多个按钮可以将项目从一个DGV移动到另一个DGV。因此,点击后,choiceDGV中的所选项目将被移除并添加到unversalDGV。但是,当我使用从universalDGV删除项目的其他按钮移动项目时,我将获得重复的项目。choiceDGV

如果此过程继续,我将项目移回第四次 4次,我将获得 4次的特定项目只是我想要的那个。

所以我很重复。有谁知道发生了什么以及如何解决这个问题所以当我第四次移动时我只得到一个项目?

编辑 - 有关问题的更多信息

我只是将每个项目从一个列表移动到另一个列表,以便其中一个DGV完全明显为空。现在,当我点击按钮将项目从另一个DGV移动到明显空的DGV时,它会重新填充DGV所具有的内容(在清除之前)加上(+)项目单击移动按钮时选择的...

1 个答案:

答案 0 :(得分:1)

您似乎永远不会从theChoiceList中删除原始项目,您需要在从choiceDGV(choiceDGV.Rows.Remove(row))中删除它的同时执行此操作,否则每次重新排序时都会执行此操作在theChoiceList上仍然包含原始项目和新项目。