C# DataGridView 双向 绑定

 

自己学习记录。主要代码:

1、如何绑定到dgv

2、后台增加数据,dgv也变化

 

后来有研究,发现就算是直接用this.dataGridView1.DataSource = list1;

只要list1 是BindingList  类型,同样可以实现

1、前台数据变化,后台list变化,包括增加、删除、改变某个单元格值

2、后台list增加、删除,前台显示增加、删除。但是如果只是list中某个变量的值变化,必须要refresh才可以改变前台某个单元格值。这个在其他双向绑定中也有,不知道是不是我还没弄清楚。

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;


namespace WinFromBinding
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //绑定到非dataGridView中可以不用属性
        Person p = new Person();
        //双向绑定dataGridView必须是  属性  类型,字段无法绑定
        public  List list1 { get; set; }

        private void Form1_Load(object sender, EventArgs e)
        { 
            p.Name = "zhangsan";
            p.Age = 12;
            //textbox 的属性--数据源---数据源中的什么数据
            this.textBox1.DataBindings.Add("Text", p, "Name");

            list1 = new List()
            {
                new Person() { Name = "zhangsan", Age = 13 },
                new Person() { Name = "zhangsan", Age = 15 }
            };

            //1、单向绑定,dgv变化后,list1 不变化,要手动遍历dgv取得数据,麻烦
            //this.dataGridView1.DataSource = list1;

            //2、双向绑定  但不能增加、删除行
            //this.dataGridView1.DataBindings.Add("DataSource", this, "list1",
            //    false, DataSourceUpdateMode.OnPropertyChanged);

            //3、双向绑定,并且dgv 可以增加行、删除行
            //但是后台增加list数据后,dgv不增加显示
            //BindingSource bs = new BindingSource();
            //bs.DataSource = list1;
            //this.dataGridView1.DataSource = bs;


            //4、双向绑定,并且dgv 可以增加行、删除行
            //list1,要用BindingList 类型,不是list类型
            //后台增加list数据后,dgv  增加显示
            BindingSource bs = new BindingSource();
            bs.DataSource = list1;
            this.dataGridView1.DataSource = bs;


        }

        private void button1_Click(object sender, EventArgs e)
        {
            list1.Add(new Person() { Name = "zhangsan", Age = 15 });
            //如果list1 是list类型,后台增加,dgv不变
            //如果是BindingList 类型,后台增加,dgv变化
        }
    }

    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

 

单向绑定和双向绑定的第一种方法,外观没有区别,

双向绑定的第二种方法外观上有区别,可以手动增加行,效果如下

C# DataGridView 双向 绑定_第1张图片

 

 

另外 ,自己有个疑问,这3种绑定方式的效率排名如何?那种速度最快?

 

另,一个写的详细的:https://www.cnblogs.com/scy251147/archive/2011/10/23/2221991.html

你可能感兴趣的:(C#,Winform)