zoukankan      html  css  js  c++  java
  • HierarchicalDataTemplateGridControl

    xaml

    <Window.DataContext>
        <local:HierarchicalWindowViewModel/>
    </Window.DataContext>
    <Window.Resources>
        <HierarchicalDataTemplate x:Key="gradetemp" DataType="{x:Type local:Grade}" ItemsSource="{Binding Students}">
            <dx:MeasurePixelSnapper>
                <StackPanel Orientation="Vertical">
                    <Label Content="{Binding Row.GradeId}"/>
                </StackPanel>
            </dx:MeasurePixelSnapper>
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate x:Key="stutemp" DataType="{x:Type local:Student}" ItemsSource="{Binding StuScore}">
            <dx:MeasurePixelSnapper>
                <StackPanel Orientation="Vertical">
                    <Label Content="{Binding Row.StuName}"/>
                </StackPanel>
            </dx:MeasurePixelSnapper>
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate x:Key="subtemp" DataType="{x:Type local:Subject}" ItemsSource="{Binding .}">
            <dx:MeasurePixelSnapper>
                <StackPanel Orientation="Horizontal">
                    <Label Content="{Binding Row.Subj}"/>
                    <Label Content="{Binding Row.Score}"/>
                </StackPanel>
            </dx:MeasurePixelSnapper>
        </HierarchicalDataTemplate>
    
        <local:SpamRuleHierarchicalDataTemplateSelector x:Key="templateSelector" 
                GradeTemplate="{StaticResource gradetemp}" 
                StuTemplate="{StaticResource stutemp}" 
                SubTemplate="{StaticResource subtemp}" />
    </Window.Resources>
    <Grid>
        <dxg:GridControl x:Name="treeList" ItemsSource="{Binding Grades}" >
            <dxg:GridControl.View>
                <dxg:TreeListView x:Name="view" TreeDerivationMode="HierarchicalDataTemplate"
                                    DataRowTemplateSelector="{StaticResource templateSelector}"
                                    AllowEditing="True" NavigationStyle="Cell" />
            </dxg:GridControl.View>
        </dxg:GridControl>
    </Grid>

    model.cs

    class HierarchicalWindowViewModel
    {
        public List<Grade> Grades { get; set; }
    
        public HierarchicalWindowViewModel()
        {
            Grades = new List<Grade>();
            List<Student> students = new List<Student>();
            for (int i = 0; i < 20; i++)
            {
                students.Add(new Student
                {
                    StuName = $"Name{i}",
                    StuScore = new List<Subject>
                    {
                        new Subject{Subj = "math", Score = 66},
                        new Subject{Subj = "cs", Score = 77},
                    }
                }); ;
            }
    
            for (int i = 0; i < 5; i++)
            {
                Grades.Add(new Grade
                {
                    GradeId = $"Grade{i}",
                    Students = students
                });
            }
        }
    }
    
    class Grade
    {
        public string GradeId { get; set; }
        public List<Student> Students { get; set; }
    }
    
    class Student
    {
        public string StuName { get; set; }
        public List<Subject> StuScore { get; set; }
    }
    
    class Subject
    {
        public string Subj { get; set; }
        public int Score { get; set; }
    }
    
    class SpamRuleHierarchicalDataTemplateSelector : DataTemplateSelector
    {
        public HierarchicalDataTemplate GradeTemplate { get; set; }
        public HierarchicalDataTemplate StuTemplate { get; set; }
        public HierarchicalDataTemplate SubTemplate { get; set; }
    
        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            RowData treeRowData = item as RowData;
            if (treeRowData == null || treeRowData.Row == null)
            {
                return null;
            }
    
            if (treeRowData.Row is Grade)
            {
                return GradeTemplate;
            }
    
            if (treeRowData.Row is Student)
            {
                return StuTemplate;
            }
    
            if (treeRowData.Row is Subject)
            {
                return SubTemplate;
            }
    
            return null;
        }
    }
    把圈子变小,把语言变干净,把成绩往上提,把故事往心里收,现在想要的以后你都会有。
  • 相关阅读:
    layui + mvc + ajax 导出Excel功能
    PL/SQL Developer工具包和InstantClient连接Oracle 11g数据库
    .NET中JSON的序列化和反序列化的几种方式
    C# 编程中的堆栈(Stack)和队列(Queue)
    Oracle 数据库常用操作语句大全
    C#方法中参数ref和out的解析
    JS实现限行
    ajax+ashx 完美实现input file上传文件
    HTML5 学习
    Linux文件和目录操作管理命令
  • 原文地址:https://www.cnblogs.com/jizhiqiliao/p/15727591.html
Copyright © 2011-2022 走看看