如何在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))

 

搞定!

转载于:https://www.cnblogs.com/sanshi/p/9766823.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯QQ 实际登录的账号并非请求的账号00008

把QQ卸载&#xff0c;重新装一遍就可以了

[css] 如何设置背景图片不随着文本内容的滚动而滚动?

[css] 如何设置背景图片不随着文本内容的滚动而滚动&#xff1f; 直接对div设置background&#xff1a;url不就好了嘛&#xff1f;上代码。<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Demo</t…

PHP实现中文字符串截取无乱码

在我们学习PHP知识的过程中&#xff0c;PHP截取字符串应该是一个非常常见的字符串基础操作了&#xff0c;想必大家都比较熟悉这方面知识点。但是有些新手朋友们可能遇到过&#xff0c;当截取中英文字符串时出现乱码的情况&#xff0c;其实这个也是非常容易解决的。首先我们要了…

[css] 写一个高度从0到auto的transition动画

[css] 写一个高度从0到auto的transition动画 写不了吧&#xff0c;max-height 定值倒是可以个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

easyui启用行号错位解决方案

$("#dataGrid").datagrid({onLoadSuccess : function () {$(this).datagrid("fixRowHeight");} }); 加入上面的代码就可以解决&#xff01;

[Luogu] P1939 【模板】矩阵加速(数列)

题目描述 a[1]a[2]a[3]1 a[x]a[x-3]a[x-1] (x>3) 求a数列的第n项对1000000007&#xff08;10^97&#xff09;取余的值。 题目解析 顺序:x.x&#xff0c;y.y&#xff0c;x.y Code #include<iostream> #include<cstdio> #include<cstring> using namespace …

[css] 移动端页面不满一屏时如何实现满屏背景?

[css] 移动端页面不满一屏时如何实现满屏背景&#xff1f; body {min-height: 100vh; }个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

JavaScript获取完整当前域名

window.location.protocol"//"window.location.host

二叉树的下一个结点

题目描述 给定一个二叉树和其中的一个结点&#xff0c;请找出中序遍历顺序的下一个结点并且返回。注意&#xff0c;树中的结点不仅包含左右子结点&#xff0c;同时包含指向父结点的指针。树见书P275分三种情况&#xff1a;1. 该节点有右子树&#xff0c;下一个结点就是它右子树…

[css] css中class和id选择器有什么区别?

[css] css中class和id选择器有什么区别&#xff1f; id 在部分浏览器的 js 中会直接生成同名变量&#xff1b; id 的唯一性&#xff0c;获取该 id 的 dom 时&#xff0c;会取同名 id 的前者&#xff1b; id 层叠权重非常高&#xff0c;1000 个 class 也覆盖不了 id 的样式&…

jmeter中文版新手入门教程

1.先增加线程组2.线程组界面展示3.增加HTTP请求4.HHTP请求页面展示5.增加结果树6.结果树界面展示

命名法

驼峰命名法&#xff1a; 方法或者变量名的第一个单词的首字母小写&#xff0c;后面的每个单词首字母大写。如 schoolStudent 、showCenter()等。 帕斯卡命名法&#xff1a; 每一个单词的首字母都大写。如类名 School等。 在java中&#xff0c;定义类的属性和方法用驼峰命名法&…

[css] css中兼容ie浏览器的前缀是什么?

[css] css中兼容ie浏览器的前缀是什么 -webkit- 谷歌 -moz- 火狐 -o- opera -ms- ie个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

发一个自己写的抓包软件,支持插件化脚本分析

市场上的抓包工具已经足够多&#xff0c;轻量级的&#xff0c;重量级的都有&#xff0c;典型的wireshark&#xff0c;smartsniff等&#xff0c; 各有优缺点&#xff0c;PowerSniff是为程序员准备的一款抓包工具&#xff0c;目标是使协议解析插件编写更简单。文件格式完全兼容wi…

dropload.js无限刷新解决方案

1、检查Ajax是否设置了同步&#xff0c;将async设置为false&#xff0c;默认为true&#xff08;异步&#xff09; 2.检查是否进入了ajax的error方法&#xff0c;如果进入了error方法&#xff0c;按照官方给的demo&#xff0c;肯定会无限循环,所以在error方法加一句debugger进行…

[css] 请问触发hasLayout的后果是什么?

[css] 请问触发hasLayout的后果是什么&#xff1f; 继承父元素的布局。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

Java的HttpURLConnection通过POST请求中文乱码

创建工具HttpRequestUtil类&#xff1a; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.…

PHP.ini 中的session 相关设置

php.ini设置参考项&#xff1a;//处理session存取的模式session.save_handler files//session档案存放路径session.save_path /tmp//session使用cookie的功能,启动: 1session.use_cookies 1//session名字session.name PHPSESSID//自动启动;0:关&#xff1b;1&#xff1a;开…

Myeclipse2015把web项目添加至tomcat中,添加列表中却没有想要添加的项目

Myeclipse2015把web项目添加至tomcat中&#xff0c;添加列表中却没有想要添加的项目?? 解决方法&#xff1a; 项目-右键-Properties-Myeclipse-Project Factes - Dynamic Web Module 前面打√ 然后点击 Apply ,在点击OK就可以添加了&#xff01;