zoukankan      html  css  js  c++  java
  • 如何在FineUIMvc(ASP.NET MVC)中显示复杂的表格列数据(列表和对象)?

    起源

    最初,这个问题是知识星球内的一个网友提出的,如何在FineUIMvc中展现复杂的列数据?

    在FineUIPro中,我们都知道有一个 TemplateField 模板列可以使用,我们只需要在后台定义一个 C# 方法,就可以返回任意想要的数据。

    可是在FineUIMvc中没有这么个列类型,那又如何展示复杂数据呢?

    解决办法

    先来看下数据模型:

    public class Student
    {
        [Key]
        public int Id { get; set; }
    
        [Required]
        [Display(Name = "姓名")]
        [StringLength(20)]
        public string Name { get; set; }
    
        [Required]
        [Display(Name = "性别")]
        public int Gender { get; set; }
    
        [Required]
        [Display(Name = "入学年份")]
        public int EntranceYear { get; set; }
    
        [Required]
        [Display(Name = "是否在校")]
        public bool AtSchool { get; set; }
    
        [Required]
        [Display(Name = "所学专业")]
        [StringLength(200)]
        public string Major { get; set; }
    
        [Required]
        [Display(Name = "分组")]
        public int Group { get; set; }
    
    
        [Display(Name = "注册日期")]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]
        public DateTime? EntranceDate { get; set; }
    
    
        
        [Display(Name = "爱好")]
        public string[] Hobby { get; set; }
    
    
        [Display(Name = "家庭信息")]
        public Family Family { get; set; }
    
    }

    通过一个静态方法获取模拟数据:

    public class StudentHelper
    {
        public static IEnumerable<Student> GetSimpleStudentList()
        {
            var students = new List<Student> { 
                new Student {
                    Id= 101,
                    Name= "张萍萍",
                    Gender= 0,
                    EntranceYear= 2000,
                    AtSchool= true,
                    Major= "材料科学与工程系",
                    Group = 1,
                    EntranceDate= DateTime.Parse("2000-09-01"),
                    Hobby = new string[]{"reading","basketball","travel"},
                    Family = new Family {
                        FatherName = "张国栋",
                        MotherName = "李梅"
                    }
                },
                new Student {
                    Id= 102,
                    Name= "陈飞",
                    Gender= 1,
                    EntranceYear= 2000,
                    AtSchool= false,
                    Major= "化学系",
                    Group = 1,
                    EntranceDate= DateTime.Parse("2001-09-01"),
                    Hobby = new string[]{"reading","basketball"},
                    Family = new Family {
                        FatherName = "陈国梁",
                        MotherName = "周兰"
                    }
                },
                new Student {
                    Id= 103,
                    Name= "董婷婷",
                    Gender= 0,
                    EntranceYear= 2000,
                    AtSchool= true,
                    Major= "化学系",
                    Group = 1,
                    EntranceDate= DateTime.Parse("2008-09-01"),
                    Hobby = new string[]{"reading","basketball","music"},
                    Family = new Family {
                        FatherName = "董辅仁",
                        MotherName = "刘静"
                    }
                },
                new Student {
                    Id= 104,
                    Name= "刘国",
                    Gender= 1,
                    EntranceYear= 2002,
                    AtSchool= false,
                    Major= "化学系",
                    Group = 2,
                    EntranceDate= DateTime.Parse("2002-09-01"),
                    Hobby = new string[]{"reading","music"},
                    Family = new Family {
                        FatherName = "刘房龄",
                        MotherName = "湘采荷"
                    }
                },
                new Student {
                    Id= 105,
                    Name= "康颖颖",
                    Gender= 0,
                    EntranceYear= 2008,
                    AtSchool= true,
                    Major= "数学系",
                    Group = 2,
                    EntranceDate= DateTime.Parse("2008-09-01"),
                    Hobby = new string[]{"travel","movie","music"},
                    Family = new Family {
                        FatherName = "康有为",
                        MotherName = "陆小妹"
                    }
                }
            };
    
            return students;
        }
    
    }

    视图定义也很简单:

    @(F.Grid().IsFluid(true).CssClass("blockpanel").Title("表格").ShowHeader(true).ShowBorder(true).ID("Grid1").DataIDField("Id").DataTextField("Name")
            .Columns(
                F.RowNumberField(),
                F.RenderFieldFor(m => m.Name),
                F.RenderFieldFor(m => m.Gender).RendererFunction("renderGender").Width(80),
                F.RenderFieldFor(m => m.EntranceYear),
                F.RenderCheckFieldFor(m => m.AtSchool).RenderAsStaticField(true),
                F.RenderFieldFor(m => m.Major).RendererFunction("renderMajor").ExpandUnusedSpace(true),
                F.RenderFieldFor(m => m.Group).RendererFunction("renderGroup").Width(80),
                F.RenderFieldFor(m => m.EntranceDate)
            ).DataSource(Model)
        )

    现在,我们希望能在表格中显示这个用户的爱好和家庭信息,最终的页面效果如图所示:

    这里我们需要用到继承,从最初的模型类 Student 继承,因为这个继承类只在视图层用到,我们命名为 StudentViewModel:

    public class StudentViewModel : Student
    {
    
        [Display(Name = "爱好")]
        public string HobbyInfo
        {
            get
            {
                List<string> hobbyNames = new List<string>();
                foreach (var hobby in Hobby)
                {
                    var hobbyName = "";
                    switch (hobby)
                    {
                        case "reading":
                            hobbyName = "读书";
                            break;
                        case "basketball":
                            hobbyName = "篮球";
                            break;
                        case "travel":
                            hobbyName = "旅游";
                            break;
                        case "movie":
                            hobbyName = "电影";
                            break;
                        case "music":
                            hobbyName = "音乐";
                            break;
                    }
                    hobbyNames.Add(hobbyName);
                }
                return String.Join("", hobbyNames.ToArray());
            }
        }
    
    
        [Display(Name = "家庭信息")]
        public string FamilyInfo
        {
            get
            {
                return "父亲:" + Family.FatherName + ",母亲:" + Family.MotherName;
            }
        }
    
    
    }

    可以看到,在这个继承的模型类中扩展了两个属性 HobbyInfo 和 FamilyInfo,其中定义了相应的业务逻辑。

    获取数据时,需要转为相应的视图模型类:

    public ActionResult Index()
    {
        var students = new List<StudentViewModel>();
        foreach (var student in StudentHelper.GetSimpleStudentList())
        {
            students.Add(new StudentViewModel
            {
                Id = student.Id,
                Name = student.Name,
                Gender = student.Gender,
                EntranceYear = student.EntranceYear,
                AtSchool = student.AtSchool,
                Major = student.Major,
                Group = student.Group,
                EntranceDate = student.EntranceDate,
                Hobby = student.Hobby,
                Family = student.Family
            });
        }
    
        return View(students);
    }

    最后是,Razor视图定义:

    @(F.Grid().ID("Grid1").IsFluid(true).CssClass("blockpanel").ShowBorder(true).ShowHeader(true).Title("表格").DataIDField("Id").DataTextField("Name")
        .Columns(
            F.RenderFieldFor(m => m.Name),
            F.RenderFieldFor(m => m.Gender).RendererFunction("renderGender").Width(80),
            F.RenderFieldFor(m => m.EntranceYear),
            F.RenderCheckFieldFor(m => m.AtSchool).RenderAsStaticField(true),
            F.RenderFieldFor(m => m.Major).RendererFunction("renderMajor").Width(150),
            F.RenderFieldFor(m => m.FamilyInfo).Width(220),
            F.RenderFieldFor(m => m.HobbyInfo).ExpandUnusedSpace(true)
        ).DataSource(Model)
        
    )

    搞定!

  • 相关阅读:
    跳出iframe
    leetcode 225. Implement Stack using Queues
    leetcode 206. Reverse Linked List
    leetcode 205. Isomorphic Strings
    leetcode 203. Remove Linked List Elements
    leetcode 198. House Robber
    leetcode 190. Reverse Bits
    leetcode leetcode 783. Minimum Distance Between BST Nodes
    leetcode 202. Happy Number
    leetcode 389. Find the Difference
  • 原文地址:https://www.cnblogs.com/sanshi/p/9766823.html
Copyright © 2011-2022 走看看