如何交换树视图控件中的项目?

发布于 2024-12-06 04:31:00 字数 361 浏览 1 评论 0原文

我有一个树视图控件:

  • 父项 1
    • 子项目 1
    • 子项目 2
    • 子项目 3
  • 父项目 2
    • 子项目 1
    • 子项目 2
    • 子项目 3
  • 父项目 3
    • 子项目 1
    • 子项目 2
    • 子项目 3

我想要移动父项目 2,以及我想要的子项目将子项向上/向下移动到其父级别。

ps 我已经用数据库完成了此操作,但是每次移动操作都重新绑定树视图是性能问题。

I have a treeview control:

  • Parent Item 1
    • Child Item 1
    • Child Item 2
    • Child Item 3
  • Parent Item 2
    • Child Item 1
    • Child Item 2
    • Child Item 3
  • Parent Item 3
    • Child Item 1
    • Child Item 2
    • Child Item 3

I want to move, for example Parent Item 2, up or down with its child items as well as i want to move child items up/down for its parent level.

p.s. I've done this with database, but it's performance issue to rebind treeview every move operation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夏尔 2024-12-13 04:31:00

我使用了此处 这里过去在 TreeView 中拖放 UI 项目

基本上它会找到保存集合的父控件,使用 ItemContainerGenerator 查找保存拖动项目的容器,然后将容器移动到父控件内的新位置

I have used a modified version of the code found here here in the past to drag/drop UI items in a TreeView

Basically it finds the parent control that holds the collection, uses the ItemContainerGenerator to find the container that holds the dragged item, then moves the container to the new location within the parent control

音盲 2024-12-13 04:31:00

也许是与您的自定义对象的双向绑定?您可以按顺序属性为树视图模型添加自定义排序器,例如...

Perhaps a two way binding with your custom object ? You can add a custom sorter for the treeview View model by order property for example...

时间你老了 2024-12-13 04:31:00

那行不通吗?

TreeNode node1 = treeView.Nodes[1];
TreeNode node2 = treeView.Nodes[2];
treeView.Nodes[1] = node2;
treeView.Nodes[2] = node1;

Couldn't that work?

TreeNode node1 = treeView.Nodes[1];
TreeNode node2 = treeView.Nodes[2];
treeView.Nodes[1] = node2;
treeView.Nodes[2] = node1;
爱的那么颓废 2024-12-13 04:31:00

下面的例子对我来说是可行的。选择一个子节点并与其父节点交换。

TreeNode currentNode, targetNode;
currentNode = TreeView1.SelectedNode;
targetNode = currentNode.Parent;
if (currentNode.Parent != null)
{
    CopyedTreeNode = (TreeNode)targetNode.Clone();
    CopyedTreeNode02 = (TreeNode)currentNode.Clone();

    targetNode.Text = CopyedTreeNode02.Text;
    targetNode.Tag = CopyedTreeNode02.Tag;
    targetNode.ImageIndex = CopyedTreeNode02.ImageIndex;
    targetNode.SelectedImageIndex = CopyedTreeNode02.SelectedImageIndex;

    currentNode.Text = CopyedTreeNode.Text;
    currentNode.Tag = CopyedTreeNode.Tag;
    currentNode.ImageIndex = CopyedTreeNode.ImageIndex;
    currentNode.SelectedImageIndex = CopyedTreeNode.SelectedImageIndex;

    CopyedTreeNode.Remove();
    CopyedTreeNode02.Remove();
}

The following example is workable for me. Select a child node and swap with its parent node.

TreeNode currentNode, targetNode;
currentNode = TreeView1.SelectedNode;
targetNode = currentNode.Parent;
if (currentNode.Parent != null)
{
    CopyedTreeNode = (TreeNode)targetNode.Clone();
    CopyedTreeNode02 = (TreeNode)currentNode.Clone();

    targetNode.Text = CopyedTreeNode02.Text;
    targetNode.Tag = CopyedTreeNode02.Tag;
    targetNode.ImageIndex = CopyedTreeNode02.ImageIndex;
    targetNode.SelectedImageIndex = CopyedTreeNode02.SelectedImageIndex;

    currentNode.Text = CopyedTreeNode.Text;
    currentNode.Tag = CopyedTreeNode.Tag;
    currentNode.ImageIndex = CopyedTreeNode.ImageIndex;
    currentNode.SelectedImageIndex = CopyedTreeNode.SelectedImageIndex;

    CopyedTreeNode.Remove();
    CopyedTreeNode02.Remove();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文