C# 表格一定要看
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<Person> 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<Person>()
{
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; }
}
}
单向绑定和双向绑定的第一种方法,外观没有区别,
双向绑定的第二种方法外观上有区别,可以手动增加行,效果如下
另外 ,自己有个疑问,这3种绑定方式的效率排名如何?那种速度最快?
另,一个写的详细的:https://www.cnblogs.com/scy251147/archive/2011/10/23/2221991.htm