TreeViewItem的顺序调整(WPF)

huangwenya123 2014-04-08 04:06:53

数据表:

我最终想要的效果是被选中的TreeviewItem可以向上或向下的调整顺序,其实我的难处是当我选中“National Custom Region Information”这个TreeviewItem时,我不知道怎么获取“City Temperature & Sales Remark”(或“Local Custom Region InforMation”)该TreeviewItem的Header值。跪求大神指导,小弟是菜鸟,已经上网找了很久了。
...全文
533 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 20 楼 u011182647 的回复:
[quote=引用 19 楼 huangwenya123 的回复:] [quote=引用 17 楼 u011182647 的回复:] 什么意思啊??骂人?是不是我理解错了 给的demo不符合
首先说声不好意思,让你误会了,本人比较激动,所以感谢语都说的有点离谱。然后你给的Demo是要重写TreeviewItem的,而我的TreeviewItem是绑定数据库的,并且还有增加、修改、删除的功能,所以你给的Demo有点不太符合我现在做的项目,可不可以在不重写TreeviewItem的情况下,进行拖拽排序啊。最后说一声好意思让你误会了我的感谢语。[/quote] 难道我给你的不可以实现添加修改删除吗??你里面代码你看数据绑定就知道了啊。我就是这样实现删除一个节点 数据库也删除 树节点也删除的啊[/quote] 重写 也是种比较好的方法。
  • 打赏
  • 举报
回复
引用 18 楼 huangwenya123 的回复:
[quote=引用 11 楼 duanzi_peng 的回复:] 是啊。你根据索引 获取项不可以么
大哥你说的根据索引获取可不可以把代码写出来,我写成这样GetItemAt(selectItem.TabIndex+1)好像不行。是不是我理解错了。[/quote] 你把你数据库里的那个 排序 字段当成索引绑定到TreeViewItem上不行吗??再根据它进行删除
小恒丶 2014-04-15
  • 打赏
  • 举报
回复
引用 19 楼 huangwenya123 的回复:
[quote=引用 17 楼 u011182647 的回复:] 什么意思啊??骂人?是不是我理解错了 给的demo不符合
首先说声不好意思,让你误会了,本人比较激动,所以感谢语都说的有点离谱。然后你给的Demo是要重写TreeviewItem的,而我的TreeviewItem是绑定数据库的,并且还有增加、修改、删除的功能,所以你给的Demo有点不太符合我现在做的项目,可不可以在不重写TreeviewItem的情况下,进行拖拽排序啊。最后说一声好意思让你误会了我的感谢语。[/quote] 难道我给你的不可以实现添加修改删除吗??你里面代码你看数据绑定就知道了啊。我就是这样实现删除一个节点 数据库也删除 树节点也删除的啊
  • 打赏
  • 举报
回复
引用 25 楼 huangwenya123 的回复:
[quote=引用 24 楼 duanzi_peng 的回复:] 你绑定到TreeView的数据源是什么类型的??Datatable? 还是ObservableCollection集合??
DataTable。[/quote] 把你的DataTable 换成ObservableCollection或者List集合

 DataTable dt = new DataTable();
            DataColumn dc = new DataColumn()
            {
                ColumnName = "Name",
            };
            dt.Columns.Add(dc);
            for (int i = 0; i < 5; i++)
            {
                DataRow dr = dt.NewRow();
                dr[0] = "节点" + i;
                dt.Rows.Add(dr);
            }
            
            foreach (DataRow row in dt.Rows)
            {
                List.Add(new EntityTreeModel() { Name = row[0].ToString() });
            }
          
            this.tvListDataTable.ItemsSource = List;



private void tvListDataTable_Selected(object sender, RoutedEventArgs e)
        {
            EntityTreeModel model = tvListDataTable.SelectedItem as EntityTreeModel;
            int currentIndex = list.IndexOf(model);   // 当前节点Index
            TreeViewItem selectedItem = (e.OriginalSource as TreeViewItem);
            var  item = this.List[currentIndex - 1];
        }
前台修改TreeView模板

 <HierarchicalDataTemplate x:Key="DataTemplateTable" ItemsSource="{Binding EntityTreeModel}">
            <TextBlock Text="{Binding Name}"></TextBlock>
        </HierarchicalDataTemplate>
<!--绑定DataTable-->
                <TreeView Name="tvListDataTable" Width="200" Margin="10,0,0,0"  Height="200" ItemTemplate="{DynamicResource DataTemplateTable}" HorizontalAlignment="Left" TreeViewItem.Selected="tvListDataTable_Selected">
                   
                </TreeView>


huangwenya123 2014-04-15
  • 打赏
  • 举报
回复
引用 24 楼 duanzi_peng 的回复:
你绑定到TreeView的数据源是什么类型的??Datatable? 还是ObservableCollection集合??
DataTable。
  • 打赏
  • 举报
回复
引用 23 楼 huangwenya123 的回复:
[quote=引用 22 楼 duanzi_peng 的回复:] 重写 也是种比较好的方法。
我知道重写是个较好的办法,但很多时候不是我的裤子太长了,而是我的腿太短了。所以我还是希望你给个,能获取SelectItem它的上下Item的代码,如A,B,C,当点击B(TreeViewItem)时,可以获取到A或者C的值。因为你给的(selItem.Parent as TreeViewItem).Items.GetItemAt(2)只能获取到父节点的第三个子项,加上TreeViewItem的数量是不定,麻烦了,大哥。[/quote] 你绑定到TreeView的数据源是什么类型的??Datatable? 还是ObservableCollection集合??
huangwenya123 2014-04-15
  • 打赏
  • 举报
回复
引用 22 楼 duanzi_peng 的回复:
重写 也是种比较好的方法。
我知道重写是个较好的办法,但很多时候不是我的裤子太长了,而是我的腿太短了。所以我还是希望你给个,能获取SelectItem它的上下Item的代码,如A,B,C,当点击B(TreeViewItem)时,可以获取到A或者C的值。因为你给的(selItem.Parent as TreeViewItem).Items.GetItemAt(2)只能获取到父节点的第三个子项,加上TreeViewItem的数量是不定,麻烦了,大哥。
  • 打赏
  • 举报
回复
引用 10 楼 huangwenya123 的回复:
(selItem.Parent as TreeViewItem).Items.GetItemAt(2)它的意思难道不是获取父节点的第三个子项吗?
是啊。你根据索引 获取项不可以么
huangwenya123 2014-04-14
  • 打赏
  • 举报
回复
(selItem.Parent as TreeViewItem).Items.GetItemAt(2)它的意思难道不是获取父节点的第三个子项吗?
huangwenya123 2014-04-14
  • 打赏
  • 举报
回复
引用 8 楼 duanzi_peng 的回复:
你有认真 看代码吗??
有啊,无论我点击“City Temperature & Sales Remark”、“National Custom Region Information”,还是“Local Custom Region Information” 。temp.Header都是等于"Local Custom Region Information"。
  • 打赏
  • 举报
回复
引用 7 楼 huangwenya123 的回复:
[quote=引用 6 楼 duanzi_peng 的回复:]

            TreeViewItem temp = (selItem.Parent as TreeViewItem).Items.GetItemAt(2) as TreeViewItem;
这一句只是获取selectItem.parent的第三个子项;如果我想获取selectItem的上一个Item或则下一个Item该如何是好.[/quote] 你有认真 看代码吗??
huangwenya123 2014-04-14
  • 打赏
  • 举报
回复
引用 6 楼 duanzi_peng 的回复:

            TreeViewItem temp = (selItem.Parent as TreeViewItem).Items.GetItemAt(2) as TreeViewItem;
这一句只是获取selectItem.parent的第三个子项;如果我想获取selectItem的上一个Item或则下一个Item该如何是好.
huangwenya123 2014-04-14
  • 打赏
  • 举报
回复
引用 17 楼 u011182647 的回复:
什么意思啊??骂人?是不是我理解错了 给的demo不符合
首先说声不好意思,让你误会了,本人比较激动,所以感谢语都说的有点离谱。然后你给的Demo是要重写TreeviewItem的,而我的TreeviewItem是绑定数据库的,并且还有增加、修改、删除的功能,所以你给的Demo有点不太符合我现在做的项目,可不可以在不重写TreeviewItem的情况下,进行拖拽排序啊。最后说一声好意思让你误会了我的感谢语。
huangwenya123 2014-04-14
  • 打赏
  • 举报
回复
引用 11 楼 duanzi_peng 的回复:
是啊。你根据索引 获取项不可以么
大哥你说的根据索引获取可不可以把代码写出来,我写成这样GetItemAt(selectItem.TabIndex+1)好像不行。是不是我理解错了。
小恒丶 2014-04-14
  • 打赏
  • 举报
回复
引用 16 楼 huangwenya123 的回复:
[quote=引用 15 楼 u011182647 的回复:] 已发送 请查收。。只是一个排序。。
我只想说一句:“感谢你整个家族。”Demo[/quote] 什么意思啊??骂人?是不是我理解错了 给的demo不符合
huangwenya123 2014-04-14
  • 打赏
  • 举报
回复
引用 15 楼 u011182647 的回复:
已发送 请查收。。只是一个排序。。
我只想说一句:“感谢你整个家族。”Demo
小恒丶 2014-04-14
  • 打赏
  • 举报
回复
引用 14 楼 huangwenya123 的回复:
[quote=引用 13 楼 u011182647 的回复:] [quote=引用 2 楼 huangwenya123 的回复:] [quote=引用 1 楼 u011182647 的回复:] 就是可以排序?
我就是要选中一个TreeviewItem,点击一个按钮,然后刷新,对应的TreeviewItem调整了位置。[/quote] 如果只是调整位置 那么我可以给个demo你。我刚写了个qq多少[/quote]976487594@qq.com[/quote] 已发送 请查收。。只是一个排序。。
huangwenya123 2014-04-14
  • 打赏
  • 举报
回复
引用 13 楼 u011182647 的回复:
[quote=引用 2 楼 huangwenya123 的回复:] [quote=引用 1 楼 u011182647 的回复:] 就是可以排序?
我就是要选中一个TreeviewItem,点击一个按钮,然后刷新,对应的TreeviewItem调整了位置。[/quote] 如果只是调整位置 那么我可以给个demo你。我刚写了个qq多少[/quote]976487594@qq.com
小恒丶 2014-04-14
  • 打赏
  • 举报
回复
引用 2 楼 huangwenya123 的回复:
[quote=引用 1 楼 u011182647 的回复:] 就是可以排序?
我就是要选中一个TreeviewItem,点击一个按钮,然后刷新,对应的TreeviewItem调整了位置。[/quote] 如果只是调整位置 那么我可以给个demo你。我刚写了个qq多少
huangwenya123 2014-04-14
  • 打赏
  • 举报
回复
引用 11 楼 duanzi_peng 的回复:
是啊。你根据索引 获取项不可以么
是啊,我把GetItemAt(2)写成GetItemAt(selectItem.TabIndex+1),结果selectItem.TabIndex等于2147483647。
加载更多回复(6)

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧