WinForm(十六)绑定

在WinForm中,有很多添加和修改数据的场景,一般的做法是当点击“添加”按钮时,收集各控件的值,然后赋值给实体类的各个属性,然后再完成保存工作。在修改时,首先把实体的原值,一个个赋值给控件,修改保存时,再反过来把值赋给实体,最后持久化保存。

除了这种做法,用绑定也是可以完成数据的分发和收集,绑定可以把实体的原值赋给控件,修改完控件后,实体的属性值也一起变化了,最后持久化提交实体就可以了。

举个例子:下面是一些实体类。

record Person
{public string Name { get; set; }public Sex Sex { get; set; }public DateTime Birthday { get; set; }public Tel Tel { get; set; }public bool IsResult { get; set; }public bool IsTest { get; set; }public List<Goods> Goodses { get; set; } public string GoodsString{get{var s = "";foreach (var goods in Goodses){s += goods;}return s;}}
}
enum Sex
{男,女
}
record Goods
{public int ID { get; set; }public string Name { get; set; }public double Quantity { get; set; }public decimal Price { get; set; }
}

有实体类后,模拟加载数据:

Person person = new Person
{Name = "桂素伟",Sex = Sex.女,Tel = new Tel { Name = "手机", No = "13333333333" },Birthday = DateTime.Parse("1979-06-22"),Goodses = new List<Goods>{new Goods{ID=1, Name="商品A", Price=1.1m,Quantity=10},new Goods{ID=2, Name="商品B", Price=2.1m,Quantity=20},}
};

接下来就是绑定了,不同数据类型的属性,绑定的控件不一样,这里更举了几种(为了了解是什么控件,控件名称没有作更改):

private void Form1_Load(object sender, EventArgs e)
{//TextBox绑定最简单textBox1.DataBindings.Add(new Binding("Text", person, "Name"));//DateTimePicker绑定与TextBox类型,时间类型属性绑定dateTimePicker1.DataBindings.Add(new Binding("Text", person, "Birthday"));//先把集合绑定到ComboBox,再绑定,绑定时要用控件的SelectedItem属性comboBox1.DataSource = Enum.GetValues(typeof(Sex));comboBox1.DataBindings.Add(new Binding("SelectedItem", person, "Sex"));//这是最常用的绑定dataGridView1.DataSource = person.Goodses;//CheckBox绑定bool类昔checkBox1.DataBindings.Add(new Binding("Checked", person, "IsTest"));//如查外部集合,赋值DataSource,再绑定listBox1.DataSource = new List<Tel>{new Tel{Name="手机",No="13333333333" },new Tel{Name="电话",No="88888888" },};listBox1.DisplayMember = "Name";listBox1.ValueMember = "No";listBox1.DataBindings.Add(new Binding("SelectedItem", person, "Tel"));//对于实体属性,拆分成RadioButton两个控件,需特殊处理radioButton1.DataBindings.Add(new Binding("Checked", person, "IsResult"));var b = new Binding("Checked", person, "IsResult");b.Format += B_Format;b.Parse += B_Parse;radioButton2.DataBindings.Add(b);
}

当然这不是合部,具体和用的控件有很大关系,不过当把大部分控件都撸过一次后,都可以抽象成一个自用的库,更简单,更快捷使用。

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

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

相关文章

在ubuntu 16.04里使用python—scrapy将爬取到的数据存到mysql数据库中的一些随笔

一、将爬取的数据保存到mysql数据库的代码&#xff08;已经能将爬取的数据保存到json文件&#xff09; &#xff08;1&#xff09;编辑Pipeline.py文件 &#xff08;2&#xff09;编辑settings.py文件 二、将数据保存至mysql数据库出现的问题 &#xff08;1&#xff09;在将数据…

powershell XML操作

1.直接加入xml结构 加入<title>是为了后续能直接添加其他node&#xff0c;否则&#xff0c;后续操作可能无法AppendChild $xml "<?xml version1.0 encodingUTF-8?><case><title>please check each point</title></case>"$xm…

十大经典排序算法(动图演示)

转自&#xff1a;https://www.cnblogs.com/onepixel/articles/7674659.html 0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类&#xff1a; 非线性时间比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c…

【Python】安装配置Anaconda

优点&#xff1a;解决Python 库依赖问题清华安装镜像https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 转载于:https://www.cnblogs.com/Neo007/p/7419253.html

如何实现 WPF 视频封面查看器

如何实现 WPF 视频封面查看器控件名&#xff1a;NineGridView作 者&#xff1a;WPFDevelopersOrg - 驚鏵原文链接[1]&#xff1a;https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用.NET40&#xff1b;Visual Studio 2019;实现视频封面查看器NineGridView基于Grid实…

如何从Internet Explorer或Edge迁移到Chrome(以及为什么要迁移)

Google’s Chrome web browser is now more widely used than Microsoft’s Internet Explorer and Edge combined. If you haven’t switched to Chrome yet, here’s why you might want to–and how to quickly switch over. Google的Chrome网络浏览器现在的使用范围比Micro…

SQL中触发器的使用

创建触发器 是特殊的存储过程&#xff0c;自动执行&#xff0c;一般不要有返回值 类型&#xff1a; 1.后触发器 &#xff08;AFTER,FOR&#xff09;先执行对应语句&#xff0c;后执行触发器中的语句 2.前触发器 并没有真正的执行触发语句&#xff08;insert&#xff0c;update…

powershell XML数据保存为HTML

1.设置html头和尾 beginning内包含表格表头 $beginning {<html><head><meta charset"utf-8" /><title>Report</title><STYLE type"text/css">h1 {font-family:SegoeUI, sans-serif; font-size:30}th {font-family:…

浏览器自动化操作标准--WebDriver

WebDriver是一个浏览器远程控制协议&#xff0c;是一个既定标准&#xff0c;它本身的内容非常丰富&#xff0c;本文不可能全部介绍&#xff0c;本文仅粗略带大家了解一下WebDriver的部分内容以及一个小的实际应用。想深入了解的请参考W3C文档WebDriver. 问题背景 开发的同学都知…

versa max_如何从Mac(和Vice Versa)打开或关闭iPhone的Safari选项卡

versa maxMany of us are familiar with this scenario: you’re looking something up on our iPhone, find exactly what we’re looking for, but then have to put our phone away to attend to something else. Later, while working on your Mac, you want to continue w…

【nuxtjs 指南】解决nuxtjs本地开发跨域和防止路由与api冲突问题

目前vue很火&#xff0c;大部分开发者把vue当做框架首选&#xff0c;然而spa是对搜素引擎很不友好&#xff0c;就会想到ssr&#xff0c;在vue社区nuxtjs完美的解决了这个问题&#xff0c;目前nuxt还不算太成熟&#xff0c;当然对于新手坑比较多&#xff0c;当我们确定使用了这个…

WPF效果第二百零五篇之自定义导航控件

前面摸索了一下会简单玩耍自定义控件了;今天再次分享一下N年前想要在GIS实现的一个导航控件;来看看最终实现的效果:1、先来看看前台xaml布局:2、后台路由事件就参照上一篇快捷方式3、关键依赖属性的回调触发路由事件:4、内部Arc的MouseDown事件触发路由事件:private void Arc_M…

python3用list实现栈

工作中遇到的需求&#xff0c;****代表标签数据别的信息&#xff1a; D01  ********  1  ******** D01  ********  2  ******** D01  ********  3  ******** D01  ********  4  ******** D02  ********  1  ******** D02  ********  2  **…

powershell 脚本运行策略,参数....

1.运行策略 Powershell一般初始化情况下都会禁止脚本执行。脚本能否执行取决于Powershell的执行策略。 PS E:> Get-ExecutionPolicy Restricted PS E:> Set-ExecutionPolicy UnRestricted 2.直接运行 PS E:> "Hello,Powershell Script" > MyScript.ps…

linux每日命令(5):mkdir命令

阅读目录(Content)1&#xff0e;命令格式&#xff1a;2&#xff0e;命令功能&#xff1a;3&#xff0e;命令参数&#xff1a;4&#xff0e;命令实例&#xff1a;1&#xff1a;创建一个空目录2&#xff1a;递归创建多个目录3&#xff1a;创建权限为777的目录4&#xff1a;创建新…

mac命令行将输出写入文件_如何在Linux中使用命令行将PDF文件转换为可编辑文本...

mac命令行将输出写入文件There are various reasons why you might want to convert a PDF file to editable text. Maybe you need to revise an old document and all you have is the PDF version of it. Converting PDF files in Windows is easy, but what if you’re usi…

Windows Socket和Linux Socket编程的区别

2019独角兽企业重金招聘Python工程师标准>>> 1、一些常用函数的移植 http://www.vckbase.com/document/viewdoc/?id1586 2、网络 socket相关程序从Windows移植到Linux下需要注意的: 1)头文件 Windows下winsock.h/winsock2.h Linux下sys/socket.h 错误处理&…

使用 C# 开发的现代轻量级 Windows 文本编辑器

你好&#xff0c;这里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;实用的工具和组件&#xff0c;希望对您有用&#xff01;Notepads 是一个具有简约设计的现代化轻量级文本编辑器&#xff0c;在 github 上开源&#xff0c;由微软大佬 Jiaqi Liu 开发。开发背…

分布式压测系列之Jmeter4.0第一季

1&#xff09;Jmeter4.0介绍 jmeter是个纯java编写的开源压测工具&#xff0c;apache旗下的开源软件&#xff0c;一开始是设计为web测试的软件&#xff0c;由于发展迅猛&#xff0c;现在可以压测许多协议比如&#xff1a;http、https、soap、ftp、database数据库、LDAP 轻量目…

powershell 查看系统设备\device status

查看设备 $allDevice"C:\Data\soundDevAll.txt" (Get-WmiObject -Class Win32_SoundDevice).Name|Out-File $allDevice device status $deviceInfoGet-WmiObject Win32_PnPEntity| select Name, Status | where {$_.Name -like "$deviceName"} $set…