WinForm(十六)绑定

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 GoodsID=1, Name="商品A", Price=1.1m,Quantity=10,
        new GoodsID=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 TelName="手机",No="13333333333" ,
        new TelName="电话",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);

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

以上是关于WinForm(十六)绑定的主要内容,如果未能解决你的问题,请参考以下文章

WinForm(十六)绑定

(四十六)c#Winform自定义控件-水波进度条

C#Winform基础 十六进制转换为二进制(整数)

C#Winform基础 八进制转换为十六进制(无符号,整数)

C#Winform基础 十进制(整数)转换为十六进制有符号

c# winform 如何实现16进制颜色值的转换