从一个列表框中删除,添加到另一个列表框中,反之亦然,使用与之前相同的排序

本文关键字:列表 排序 反之亦然 添加 一个 删除 另一个 | 更新日期: 2023-09-27 18:14:42

我必须从一个列表中删除选中的项目并将它们添加到另一个列表中,反之亦然,它工作得很好。问题是,当我从第二个列表中删除项目并再次将它们添加到第一个列表时,排序是添加列表的末尾。是否可以保存"位置",像以前一样将它们添加到相同的位置?

像list.sort()这样的解决方案无法工作,因为它是一个包含所有表和触发器等的数据库…

        private void LstSelectedDbTables_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
    {
        if (lstSelectedDbTables.SelectedIndex != -1)
            if (e.KeyValue == (char) Keys.Delete || e.KeyValue == (char) Keys.Back)
            {
                var selectedItems = lstSelectedDbTables.SelectedItems;
                var bdHashSet = new List<string>(lstSourceDatabaseTables.Items.Cast<string>());
                for (int i = selectedItems.Count - 1; i >= 0; i--)
                {
                    bdHashSet.Add(selectedItems[i].ToString());
                    lstSelectedDbTables.Items.Remove(selectedItems[i]);
                }
                lstSourceDatabaseTables.DataSource = bdHashSet;
            }
    }
    private void lstSourceDatabaseTables_DoubleClick(object sender, EventArgs e)
    {
        if (lstSourceDatabaseTables.SelectedIndex != -1)
        {
            var bdHashSet = new HashSet<string>(lstSourceDatabaseTables.Items.Cast<string>());
            var selectedItems = lstSourceDatabaseTables.SelectedItems;
            for (int i = selectedItems.Count - 1; i >= 0; i--)
            {
                lstSelectedDbTables.Items.Add(selectedItems[i]);
                bdHashSet.Remove(selectedItems[i].ToString());
            }
            lstSourceDatabaseTables.DataSource = bdHashSet.ToList();
        }
    }

从一个列表框中删除,添加到另一个列表框中,反之亦然,使用与之前相同的排序

您不能将List<T>的项目添加到列表中的特定位置,因为List<T>.Add()

将一个对象添加到List的末尾。

你可以创建一个简单的列表,不以任何方式附加到数据库上下文,做你的操作,如插入和删除,然后传递列表,正确排序保存在你的数据库中。然后,您可以使用SortOrderBy,因为这些方法被设计为完全执行您所要求的。

当第一列是"最后一个索引位置"而另一列是"itemvalue"时,你必须制作一个数组列表…因此,每次将项从列表框移动到另一个列表框时,必须将目标列表框的所有元素从索引n+1到末尾复制到另一个称为temp的相同类型的列表中,并在复制后删除每个元素。然后插入您想要移动的新元素,并插入temp列表中的所有项。