ReoGrid代替EXCEL显示数据,可视化修改ReoGrid.Mvvm:ReoGrid绑定模型

ReoGrid 是 C# 编写的.NET 电子表格控件(类似 Excel)。支持单元格合并,边框样式,图案背景颜色,数据格式,冻结,公式,宏和脚本执行,表格事件等。支持 Winform\WPF。

ReoGrid.Mvvm 是针对 ReoGrid.WPF 编写的一个开源类库,用于方便地将控件绑定到模型,从而实现模型(Model)和视图(View)的分离,适用于MVVM模式的开发。

项目地址:https://github.com/IUpdatable/ReoGrid.Mvvm,欢迎star

下面以一个图书信息的简单项目演示如何使用 ReoGrid.Mvvm. 完整代码见项目 ReoGrid.Mvvm.Demo.

演示效果如图

1. 创建一个 WPF 项目

2. NuGet 安装 ReoGrid.Mvvm

Install-Package ReoGrid.Mvvm

3. 创建一个图书的模型(Model)

复制代码

 1 [WorksheetAttribute(Title = "Books")]2 public class Book: IRecordModel3 {4     [ColumnHeader(Index = 10, IsVisible = false)]5     public int Id { get; set; }6 7     [ColumnHeader(Index = 20, Text = "Name", Width = 150)]8     public string Title { get; set; }9 
10     [ColumnHeader(Index = 30)]
11     public string Author { get; set; }
12 
13     [ColumnHeader(Index = 35, Text = "Type")]
14     public BindingType BindingType { get; set; }
15 
16     [ColumnHeader(Index = 36, Text = "OnSale")]
17     public bool IsOnSale { get; set; }
18 
19     [NumberFormat(DecimalPlaces = 2)]
20     [ColumnHeader(Index = 40)]
21     public decimal Price { get; set; }
22 
23     [DateTimeFormat( CultureName = "en-US")]
24     [ColumnHeader(Index = 45, Text = "Publish Date", Width = 200)]
25     public DateTime Pubdate { get; set; }
26 
27     public int RowIndex { get; set; }
28 }

复制代码

(1) Model 必须实现IRecordModel接口

IRecordModel 只有一个 RowIndex 属性, 你完全不用管这个属性,这是 ReoGrid.Mvvm 内部用到的。

(2) WorksheetAttribute 用来说明工作表的名字

可选,不指定该特性,那么就用Model类的类名作为工作表名称。

(3) ColumnHeader特性中, 必须指定 Index 属性,其他的是可选的。

(4) DateTimeFormat DateTimeFormat 目前不建议使用

ReoGrid本身并没有完整实现这些特性。当然,也有可能我理解有误。

4. 在ViewModel中修改:

4.1 创建两个成员变量

1 private ObservableCollection<IRecordModel> _Books;
2 private WorksheetModel _WorksheetModel;

4.2 初始化

复制代码

 1 _Books = new ObservableCollection<IRecordModel>();2 for (int i = 0; i < 10; i++)3 {4     Book book = new Book();5     book.Id = i;6     book.Title = string.Format("Title {0}", i);7     book.Author = string.Format("Author {0}", i);8     book.BindingType = BindingType.Hardback;9     book.IsOnSale = true;
10     book.Price = (decimal)(i * 10.1);
11     book.Pubdate = DateTime.Now;
12     _Books.Add(book);
13 }
14 // 变量 reoGridControl 是 ReoGridControl 的控件元素实例
15 _WorksheetModel = new WorksheetModel(reoGridControl, typeof(Book), _Books);
16 //如果需要在输入值前检查变量的有效性,那么就实现该函数
17 _WorksheetModel.OnBeforeChangeRecord += OnBeforeChangeRecord;

复制代码

 4.3 在 OnBeforeChangeRecord 函数中演示输入值有效性检查

复制代码

 1 private bool? OnBeforeChangeRecord(IRecordModel record, PropertyInfo propertyInfo, object newProperyValue)2 {3     if (propertyInfo.Name.Equals("Price"))4     {5         decimal price = Convert.ToDecimal(newProperyValue);6         if (price > 100m) //假设最大价格是1007         {8             MessageBox.Show("最大价格是 100, 请重新输入!.", "Alert", 9                             MessageBoxButton.OK, MessageBoxImage.Warning);
10             return true; // 返回 true 则取消本次输入
11         }
12     }
13 
14     return null;
15 }

复制代码

4.4 增加、删除、移动、编辑 模型(Model)

复制代码

 1 // 增加一条书目信息2 int count = _Books.Count;3 Book book = new Book();4 book.Id = count;5 book.Title = string.Format("Title {0}", count);6 book.Author = string.Format("Author {0}", count);7 book.BindingType = BindingType.Hardback;8 book.IsOnSale = true;9 book.Price = (decimal)(count * 10.11) > 100m ? 100m :(decimal)(count * 10.11);
10 book.Pubdate = DateTime.Now;
11 _Books.Add(book);
12 
13 // 移除一条书目信息
14 if (_Books.Count > 0)
15 {
16     _Books.RemoveAt(_Books.Count - 1);
17 }
18 
19 // 移动一条书目信息
20 if (_Books.Count > 2)
21 {
22     _Books.Move(0, _Books.Count - 1);
23 }
24 
25 // 编辑一条书目信息
26 (_Books[0] as Book).Price = new Random(DateTime.Now.Millisecond).Next(1,100);
27 // 编辑完 模型(Model) 之后要调用 UpadteRecord 函数将模型(Model)的变化同步到视图(View)中
28 _WorksheetModel.UpadteRecord(_Books[0]); 

复制代码

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

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

相关文章

游戏视频是后期配音好还是边录边配 游戏视频怎么剪辑制作才能火 视频剪辑免费软件

游戏视频后期配音是先配还是先剪&#xff1f;游戏视频后期配音没有统一的准则&#xff0c;可以先配&#xff0c;也可以后配&#xff0c;主要是根据内容而定。游戏视频剪辑在游戏玩家中十分流行&#xff0c;那么&#xff0c;游戏视频怎么剪辑制作&#xff1f;下面让我们以具体的…

ai写作软件哪个好用?这些写作工具值得收藏

在创意写作的世界里&#xff0c;每个字词都是作者情感与灵魂的载体。 但灵感的闪现与文字的成型之间&#xff0c;往往存在着一段漫长且充满挑战的旅程。幸运的是&#xff0c;人工智能技术的崛起带来了AI写作软件&#xff0c;它们不仅能够点燃创作的火花&#xff0c;还能辅助我…

探索 ASTRA.AI:打造低代码多模态 AI 应用的开源平台

声网&#xff08;Agora&#xff09;研发的 ASTRA 平台&#xff0c;作为一款面向大语言模型应用开发的开源解决方案&#xff0c;无疑为 AI 领域注入了新的活力。它巧妙地结合了 BaaS&#xff08;后端即服务&#xff09;概念与大型语言模型的运营&#xff0c;使得创建高性能的生成…

如何给CAD文件加密丨五种超级简单的CAD图纸加密方法

CAD图纸作为企业核心竞争力的体现&#xff0c;其安全性直接关系到企业的生产效率和市场竞争力。一旦图纸被泄露&#xff0c;竞争对手可能会迅速模仿或改进产品&#xff0c;从而抢占市场份额。此外&#xff0c;图纸的非法获取还可能涉及知识产权纠纷&#xff0c;给企业带来法律风…

镜像加速方法

参考&#xff1a; https://github.com/DaoCloud/public-image-mirror 使用DaoCloud加速&#xff1a; 比如我想在dockerhub下载这个镜像&#xff1a; 本来的命令是&#xff1a; docker pull openjdk:11.0-jdk-slim-buster在要拉取的镜像前&#xff0c;添加前缀&#xff1a;m.…

迅为RK3588S开发板广泛用于边缘技术,人工智能,智能家居,智慧零售,智能网关等

性能强 iTOP-3588S开发板采用瑞芯微RK3588S处理器&#xff0c;是全新一代AloT高端应用芯片&#xff0c;搭载八核64位CPU&#xff0c;四核Cortex-A76和四核Cortex-A55架构主频高达2.4GHZ&#xff0c;8GB内存&#xff0c;32GBEMMC。 四核心架构GPU内置GPU可以完全兼容0penGLES1.1…

MFC Ribbon菜单中英实时文切换方法

简介 最近在搞一个老外的项目&#xff0c;本来谈的好好的&#xff0c;纯英文界面。项目接近尾声了&#xff0c;又提出了中英文实时切换的新需求&#xff0c;没办法就只能想办法&#xff0c;毕竟客户最大嘛。 实现方法 还好本来的ribbon英文菜单不复杂&#xff0c;就用纯C编码…

struts2如何防止XSS脚本攻击(XSS防跨站脚本攻击过滤器)

只需要配置一个拦截器即可解决参数内容替换 一、配置web.xml <filter><filter-name>struts-xssFilter</filter-name><filter-class>*.*.filters.XssFilter</filter-class></filter><filter-mapping><filter-name>struts-xss…

专属大学生的创作活动,你在CSDN坚持创作,虚竹哥带你成长,带你涨粉

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

PHP智慧社区小区物业管理系统小程序源码

让生活更便捷&#xff0c;社区更和谐✨ &#x1f3e1;【开篇&#xff1a;智慧生活&#xff0c;从社区开始】&#x1f3e1; 在快节奏的现代生活中&#xff0c;寻找一份便捷与舒适成为了我们共同的追求。小区&#xff0c;作为我们日常生活的温馨港湾&#xff0c;其管理水平和服…

安泰高压放大器设计要求是什么样的

高压放大器是一种在电子系统中用于放大高电压信号的重要组件。它通常用于应对需要处理高电压信号的应用&#xff0c;如医疗设备、实验室仪器和通信系统。设计高压放大器需要满足一系列严格的要求&#xff0c;以确保其性能稳定、可靠&#xff0c;并符合特定应用的需求。 以下是关…

适合学生写作业的台灯怎么选?一文读懂护眼台灯怎么选!

不知大家发现没有&#xff0c;近些年&#xff0c;戴眼镜的小孩儿是越来越多了&#xff0c;甚至有的地方好多刚上小学一年级的孩子&#xff0c;就已经戴着200度的近视镜了。据统计&#xff0c;如今&#xff0c;中国小学生近视比例为42%&#xff0c;初中生近视比例为80.7%&#x…

LabVIEW航空发动机试验器数据监测分析

1. 概述 为了适应航空发动机试验器的智能化发展&#xff0c;本文基于图形化编程工具LabVIEW为平台&#xff0c;结合航空发动机试验器原有的软硬件设备&#xff0c;设计开发了一套数据监测分析功能模块。主要阐述了数据监测分析功能设计中的设计思路和主要功能&#xff0c;以及…

捷配笔记-如何设计PCB板布线满足生产标准?

PCB板布线是铺设连接各种设备与通电信号的路径的过程。PCB板布线是铺设连接各种设备与通电信号的路径的过程。 在PCB设计中&#xff0c;布线是完成产品设计的重要步骤。可以说&#xff0c;之前的准备工作已经为它做好了。在整个PCB设计中&#xff0c;布线设计过程具有最高的极限…

[Err] 2006 - MySQL server has gone away 错误 MySQL server hasgoneaway报错原因分析及解决办法

导入sql文件报错&#xff1a; Your SQL statement was too large. 当查询的结果集超过 max_allowed_packet 也会出现这样的报错。定位方法是打出相关报错的语句。 用select * into outfile 的方式导出到文件&#xff0c;查看文件大小是否超过 max_allowed_packet &#xff0c;如…

楼道灯微波雷达模块模组,智能感应uA级超低功耗替换红外传感器,飞睿助力绿色照明

随着科技的飞速发展&#xff0c;LED楼道灯早已不仅仅是照亮我们回家路的工具&#xff0c;它们正变得越来越智能、高效和环保。今天&#xff0c;就让我们一起探索LED楼道灯背后的科技——飞睿智能微波雷达模块模组&#xff0c;以及它如何以超低功耗&#xff08;uA级别&#xff0…

甘肃美食于兰洽会数智电商馆展现魅力

在近日盛大开幕的兰洽会上&#xff0c;数智电商馆成为了备受瞩目的焦点&#xff0c;而甘肃平凉的特产更是在其中大放异彩。 平凉&#xff0c;这座拥有深厚历史文化底蕴的城市&#xff0c;带着其独具特色的物产走进了兰洽会的舞台。走进数智电商馆&#xff0c;首先映入眼帘的便是…

Latex(3): IEEE latex模版使用问题记录

文章目录 一、题目、作者、致谢格式问题1. xelatex与pdflatex模式不同导致字体显示不够粗2. xelatex模式下\IEEEmembership{Senior Member, IEEE}显示为正体&#xff0c;显示不了斜体 二、参考文献格式问题1. 作者显示为横线 记录IEEE latex的使用问题一、题目、作者、致谢格式…

真实测评网上较火的两款智能生成PPT产品:秒出PPTAI PPT

测评两款AI生成PPT的工具&#xff1a;秒出PPT和AI PPT。这俩个款是目前竞争比较激烈的且使用起来比较好的产品。一下主要从PPT模板、一键生成及生成效果、Word转PPT来分析一下使用感受。 秒出PPT 秒出PPT是集模板站与编辑站一体的产品&#xff0c;支持微信扫码登录。主页可以直…

55070-001J 同轴连接器

型号简介 55070-001J是Southwest Microwave的连接器。这款连接器外壳和中心接触件采用 BeCu 合金制成&#xff0c;这是一种具有良好导电性和机械性能的铜合金。绝缘珠则使用了 PEEK HT 材料制成&#xff0c;这是一种耐高温、耐化学腐蚀的工程塑料。为了确保连接的可靠性和稳定性…