C#
落单枫叶
嘉善县文化市场行政执法队
展开
-
Blazor 带有18位身份证号校验的TextBox
Blazor 带有18位身份证号校验的TextBox原创 2023-08-02 19:49:29 · 261 阅读 · 0 评论 -
Blazor 自定义可重用基础组件之 Select 更新版
所以我这个Select只接受Value为string类型的值,把转换工作移到外面来,因为放到内部转换不是很可行。这个看看原生的InputSelect就明白了,它根本只给了个ChildContent,像option这些东西需要自己另外弄,遭到了很多人的吐槽。暴露在外边,就没有转换这个任务了,但写代码的任务更多了。上次的Select能用,但有缺陷,当值改变时,没有引发一个属于EditForm的值改变事件,就是说还没有连接到表单,功能不完善。原创 2023-08-01 10:54:07 · 559 阅读 · 0 评论 -
Blazor 自定义可重用基础组件之 Tab
Tab 组件可能很少用,这里只是为简化代码,故可能比较难看,但能用。TabItem也有限制为5个,如果超过则再自行增加。原创 2023-07-19 17:54:08 · 279 阅读 · 0 评论 -
Blazor 自定义可重用基础组件之 Dialog (Bootstrap Modal)
对话框是常用的组件之一,可以提供信息提示,也可以设置表单录入数据等。但是,Bootstrap Modal需要JS互操作,这个不太懂,只能绕过。原创 2023-07-17 00:35:15 · 949 阅读 · 0 评论 -
Blazor 自定义可重用基础组件之 限制输入日期范围的DateNullBox
DateTime 和 DateTime?很不好搞,它不像string和string?有默认的转换,只是string不能为null。如果将TValue设为DateTime,就不能绑定DateTime?属性,同样,设为DateTime?,也不能绑定DateTime属性。所以前面一篇文章只能适用于DateTime属性,兼容性差,只能另搞一个DateTime?原创 2023-07-11 14:25:55 · 290 阅读 · 0 评论 -
Blazor 自定义可重用基础组件之 限制输入日期范围的DateBox
输入日期是一个非常重要的基础组件,可能也需要限定日期范围。这里只对日期进行定义,即设定type="date",其他的不常用,就略去了。DateTime 是一个结构体,像int有为0的初始值一样,它有一个初始值{0001/1/1 0:00:00};所以麻烦就在这里,要么就设为DateTime?,可这与codefirst相冲突;要么设定初始值,未设定初始值,需要在OnValidSubmit中再去判断日期字段是否未输入,即还是等于它的初始值。原创 2023-07-11 01:32:09 · 416 阅读 · 0 评论 -
Blazor 自定义可重用基础组件之 限制输入值大小的NumberBox(InputNumber)
我们可能限制用户输入值范围,超出视为无效且引发错误,这就是设置最大值和最小值。NumberBox.razor在这里未作改动。数值类型有好几种,但设置最大和最小一般为int类型,如果有特殊需求,代码就要复杂一点。原创 2023-07-09 00:34:33 · 303 阅读 · 0 评论 -
Blazor 自定义可重用基础组件之 带标头排序的Table
实现点击标头按所在列值进行排序,是一个非常有用的功能,其他的UI一般搞得非常复杂,添加标志图标什么的,使得本就不宽裕的表格更加拥挤。我的思路是,点击所在列的标头部位,传递标头值,然后根据标头值来改变查询语句。因为并不是所有列都需要排序,需要有一个特征字符。以下是Table.razor。原创 2023-07-04 15:22:58 · 421 阅读 · 0 评论 -
Blazor 自定义可重用基础组件之 NumberBox(InputNumber)
只能输入数字的输入框,为避免命名冲突,先命名为NumberBox。原创 2023-07-03 17:27:11 · 307 阅读 · 0 评论 -
Blazor 自定义可重用基础组件之 PasswordBox
有了TextBox,PasswordBox相对容易多了,就是改个type的事。原创 2023-07-03 11:56:18 · 175 阅读 · 0 评论 -
Blazor 自定义可重用基础组件之 TextBox(InputText)
这是一个带标签和验证信息的输入框,用起来很方便。为避免命名冲突,这里将InputText改名为TextBox,其实内部类型就是string。可能有人会说用反射获取标签,我认为上面这个代码非常明显地显示了这是哪个属性输入框,用反射反而查找起来不容易。注意,组件的总长不能大于上一级容器长度,否则标签会分行或断行。原创 2023-06-30 15:29:11 · 612 阅读 · 0 评论 -
Blazor 自定义可重用基础组件之 CheckBox
Blazor 原生提供的基础组件实在是一言难尽,这给许多Blazor UI公司很多机会。可是试用了不少如AntDisgen、BootstrapBlazor等,总会有一些难尽如意的地方。还是自己做丰衣足食吧。其中的class是引用Bootstrap v5.3.0的。原创 2023-06-28 20:42:19 · 553 阅读 · 0 评论 -
Blazor 自定义可重用基础组件之 Select
Select 组件比较难做,因为它有确定类型为string 的显示值,还有不确定类型的返回值。首先需要一个专门的类作为其下拉列的返回值和显示值,其次因返回值的不确定性,需要进行转换来确定。第三,如果本身有初始值,Select 不像 CheckBox 那样简单的初始化。原创 2023-06-29 01:00:45 · 640 阅读 · 0 评论 -
Blazor 自定义可重用基础组件之 Table
Table 组件比较复杂,内容比较多。PaginatedList 代码以前贴过,这里只增加一个属性ItemCount。原创 2023-06-29 12:17:17 · 477 阅读 · 0 评论 -
Blazor Server 如何从客户端上读取文件内容
一种方式是将文件上传到Server端进行读取,一种方式当然是直接在网页客户端读取后发送数据到Server端进行保存。考虑到Server端的安全性,后一种方式相对更安全,同时减轻Server端压力。需要注意的是IBrowserFile接口没有包含原始文件的路径。正因为没有路径,不可能以打开文件的方式去直接打开它然后读取,所以,需要再次将它写入到定义好的路径中,然后打开它。原创 2023-05-19 10:35:14 · 1096 阅读 · 0 评论 -
C#数据更新保存需要注意的一个问题
因为AppUser的Id是主键,不可修改,否则就是新数据,不能有主键等于什么的语句出现,即其中的“Id = Id”赋值语句不应出现,而不是通常以为的给用户修改的也只是Name,Id的值用户也看不到,不可能改变,没有修改。所以正确的做法是:要么直接传Model到前端进行修改,然后进行保存,因为这里不会出现Id的赋值语句;原创 2023-05-12 02:05:37 · 185 阅读 · 0 评论 -
创建Blazor全局页面变量供各页面级组件使用
如果子组件1用户操作后,转到组件2,这时我们不想再显示组件1,又要处理不显示组件1的动作,再处理显示组件2的动作,真的很麻烦。页面变量其实就是Layout母版页中的Body能接受的变量,但是我们在编写组件页的时候,它不能简单地实现回调方法,编写的EventCallback 回调方法无法简单地 ="@某个父级方法",只要解决这个难题,问题就迎刃而解了。我觉得吧,就是个Id值,一般是int类型,供各页面组件使用来获取数据库的相应数据,这个非常有用,它能不再显示在浏览器Url路由中,更加安全。原创 2023-04-17 01:34:01 · 1244 阅读 · 0 评论 -
Blazor JWT登录退出、身份控制、定时检测账户管理示例项目
功能:适合企业内部的账户分发(非开放公众注册)的App。1、身份控制:分发账户为初始密码,使用初始密码登录后必须修改密码才能使用相应身份的功能;根据身份提供相应菜单。2、定时检测:使用JWT功能,包括生成和验证jwt,可定义jwt生效时长、验证时间间隔,失效后自动转到登录页面。3、账户管理:包括添加、编辑、离职管理示例。本项目只在提供示例功能演示,力求简单明了和安全稳定高效,界面简单美化。原创 2023-03-20 23:03:28 · 554 阅读 · 0 评论 -
关于密码的正则表达式
关于密码的正则表达式原创 2022-09-04 22:25:39 · 182 阅读 · 0 评论 -
Blazor Server 的登录与退出(二)
注意:Key要求有一定的长度,建议复制新生成的Guid.NewGuid().ToString();上篇已经实现了登录与退出的主服务类,其他还需要一些具体的东西。1、引用Blazored.LocalStorage包;7、登录Razor组件(略)。注意:需要注册服务。...原创 2022-08-26 11:16:22 · 1936 阅读 · 0 评论 -
Blazor Server 的登录与退出(一)
如果自学Blazor ,因为增加了许多知识点,有许多问题会是一头雾水,难以理清。Blazor Server 的登录与退出就是一个非常难以理清的问题,因为我有强迫症,既然用了Blazor,我难道又要退回去用Razor Page?新建立的Blazor Server程序,使用Identity的个人标识账户,它的登录与退出默认使用的是Razor Page,因为它能非常清晰地得到ClaimsPrincipal 的User,和不支持Razor组件,特别是所以想抛开Razor Page,它的登录与退出只能另想办法,好像一原创 2022-07-08 17:39:46 · 5413 阅读 · 2 评论 -
.NET5.0 Code First 建立索引方法
Code First方式建立主键可以不需要注释,遵循约定即可,即属性为 Id、Id 、类名加Id都可以,这个很方便。其他的属性建立索引,原来的方式为属性上添加注释原创 2021-05-28 11:26:29 · 673 阅读 · 0 评论 -
RazorPage 读取Excel并显示数据
最近一直在查找RazorPage 读取Excel并显示数据的资料。首先是上传Excel文件。只有Blazor 的上传文件在https://docs.microsoft.com/zh-cn/aspnet/core/blazor/file-uploads?view=aspnetcore-5.0上有比较全面的上传文件代码,而Blazor 还不太熟悉,RazorPage的代码较为不全,最后是借鉴了Blazor 的代码进行改写,总算成功了。其次是读取Excel数据。以前曾使用的是Excel 的Applica...原创 2021-03-30 22:05:39 · 1281 阅读 · 0 评论 -
解决使用ASP.NET Core Identity如何在网站母版页显示用户中文姓名
最近在学Aspnetcore,由于新学,加上AspNetCore不断更新换代,碰到的问题百度查来的大多是旧答案,解决不了老问题。因为老问题常被新的更安全更快速的方案所替代,也常常删除或替换掉了老的解决方案。AspNetCore有容易的地方,有易用的地方,也有高深难用的地方。有这样一个需求,用户用账号登录,然后在网页上显示用户的姓名或昵称,也就是我要显示DisplayName,而不是User...原创 2019-12-19 14:43:22 · 906 阅读 · 0 评论 -
第二十课先乘除后加减——C#计算器编程教学
不少人念念不忘四则运算的运算符优先级,而Windows7的计算器基本型也没有实现它。其实根据我的算式运算解决思路,其实就查找有乘除的项,先加好(对象加),然后做加减。代码修改如下: private string RunCaclLists() { for (int i = 0; i < CaclLists.Count; i++)原创 2016-05-04 16:28:21 · 2824 阅读 · 0 评论 -
用C#创建应用程序桌面快捷方式
private void CreateShortcutOnDesktop() { //添加引用 (com->Windows Script Host Object Model),using IWshRuntimeLibrary; String shortcutPath = Path.Combine(Environment.GetFold原创 2018-01-04 12:00:41 · 9264 阅读 · 1 评论 -
Wpf ComboBox 多级正反向级联的实现
思考了一个多星期,经过反复测试验证,终于实现了Wpf ComboBox 多级正反向级联,话不多说,下面上代码:这是一个企业管理系统示例,当然只是一个笑话。数据库有三张表,一张企业表,一张5级行政区划表,全国->省市->地市->县市->乡镇街道,还有一张注册表,标示使用者及其行政区划。为了简化示例,企业表只有2个字段,名称和地址,地址又分为2个字段,一个行政区划Id,联接行政区划表,一个行政区划原创 2018-01-09 11:17:43 · 2417 阅读 · 0 评论 -
使用MvvmLight如何向ViewModel传递参数
MvvmLight是个很好的编程框架,使用方便,但如果不熟练也会有许多难以解决的问题。就比如不知道如何向ViewModel传递参数。在网上也有不少这样的问题,解答往往是使用它提供的Messenger,有方便之处,也有不便之处。比如,我要根据参数来获取数据库数据,那么势必要先做清空,再获取新数据,可能有别的绑定或私有字段进行相应的更改,造成不少麻烦,也有可能弄不好。不同类型的数据使用同一个View,...原创 2018-02-22 17:01:20 · 4062 阅读 · 1 评论 -
第十一课私有变量——C#计算器编程教学
前几节讲到了7个私有变量,分别是:private int i = 0;private IList caclLists = new List();private string caclString = "";private string result;private bool haveDecimal = false;private bool noStringAdded = true;原创 2016-05-04 15:46:57 · 582 阅读 · 0 评论 -
mvvm menu 绑定
mvvm menu 绑定原创 2014-11-16 21:16:48 · 4155 阅读 · 1 评论 -
C#计算器编程教学课程前言
最近完成C#计算器编程,模仿WIN7的基本型,但有所超越。除了完成90%的功能,还添加了多项式,支持键盘输入,算式保留,根据中国人习惯作了改进。程序运用了C#的基本功能,包括接口、绑定、面向对象、事件、字段封装、多种循环、集合操作、操作符重载、string的多种操作等,同时实现先乘除后加减的功能,但还没实现带括号的计算。这次是WinForm的计算器,下次是WPF的。先上图所谓90%原创 2016-05-03 17:19:29 · 665 阅读 · 0 评论 -
第十九课关于记忆存取——C#计算器编程教学
这个编程其实难度不高,无非就是反算式保存在memoryString里,读取时返回给caclString。如果增加点功能,无非就是把记忆的算式添加到新算式上。比如: private void MemoryRecall() { if (HaveMemory) { if (isOPA原创 2016-05-04 16:13:40 · 1143 阅读 · 0 评论 -
第十八课程序容错能力——C#计算器编程教学
支持键盘输入,不可控因素增加,必须具有很强的容错能力。一是中文习惯的乘除符号,与键盘及程序语言是不同的,所以,你要在SwitchString方法中添加对键盘乘除符号的支持。二是对错误输入进行过滤。三就是上面说的预期策略选择。四是对计算构造try一catch语句,把出错原因摆在明面上。第十八课结语。允许用户犯错,自己千万别犯错是程序员编程的最高原则。原创 2016-05-04 16:10:54 · 836 阅读 · 0 评论 -
第一课程序框架的构建——C#计算器编程教学
程序再小,它也要运行的相关功能要求,或者还有扩展需求。比如,算式中有括号怎么办?你们不要被图片中的括号诱导,其实我没实现算式中有括号的功能,那只是取反。 选择了项目,当然第一步是确定功能需求。本计算器是模仿Win7的基本型,这上面的每一个按钮基本可代表一个功能,分析也简单,英语单词不会查百度。主要功能其实是三个,输入、输出和记忆,也可以考虑可扩展等因素,编写完整实现功能暴露。原创 2016-05-04 08:52:59 · 1079 阅读 · 0 评论 -
自定义信息框 C# Wpf
还在用MessageBox.Show()?你OUT了,弄了个自定义 C# Wpf MessageBox,共享一下,没写技术文档,但我想不难弄明白。using GalaSoft.MvvmLight.CommandWpf;using System;using System.Windows;using System.Windows.Input;using System.Windows.Med原创 2016-02-26 00:36:15 · 823 阅读 · 0 评论 -
身份证18位C#验证程序
bool CheckIDCard18(string Id) { long n = 0; if (long.TryParse(Id.Remove(17), out n) == false || n { return false;//数字验证 }转载 2014-12-18 10:30:11 · 853 阅读 · 0 评论 -
mvvm+DataSet使编程变得简单
mvvm模式下利用DataSet来简化编程,程序短小精悍,实用性强,这里是一个示例,包括2个Model和一个ViewModel,窗口程序的话一般都容易,就不列出了。本示例禁止转载!原创 2014-12-16 11:25:58 · 760 阅读 · 1 评论 -
关于WPF DatePicker的绑定
WPF DatePicker控件非常有意思,当页面原创 2014-11-20 11:25:28 · 12101 阅读 · 0 评论 -
WPF中radiobutton 的 data binding方法
WPF中的radiobox通过data binding绑定到一个bool属性后,如下所示,尽管UI可以正确的显示,但是data binding的属性不能正确的更新。比如user点了No之后属性UserChoice还是True。转载 2014-11-18 09:28:53 · 4443 阅读 · 0 评论 -
调用DbHelperACE获取OleDbDataReader后手动关闭连接方法
DbHelperACE中有ExecuteReader(string strSQL)方法: /// /// 执行查询语句,返回OleDbDataReader(使用该方法切记要手工关闭OleDbDataReader和连接) /// /// 查询语句 /// SqlDataReader原创 2014-09-29 11:33:41 · 1062 阅读 · 0 评论