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

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.html

C# DataGridView 双向 绑定相关推荐

  1. 【进阶玩法】Angular用emit()实现类似Vue.js的v-model双向绑定[(ngModel)]功能

    app.component.html <app-sizer [(ngModel)]="fontSizePx"></app-sizer> <p [sty ...

  2. 【说人话】真正意义上讲清楚了如何用$emit()在Vue.js的自定义组件中实现v-model=“”双向绑定

    子组件sg-component.vue代码 <template><div class="sg-component"><button @click=&q ...

  3. Vue.js双向绑定的实现原理

    Vue.js 最核心的功能有两个,一是响应式的数据绑定系统,二是组件系统.本文仅探究双向绑定是怎样实现的.先讲涉及的知识点,再用简化得不能再简化的代码实现一个简单的 hello world 示例. 一 ...

  4. 微信小程序和vue双向绑定哪里不一样_vue和微信小程序的区别、比较

    链接:https://segmentfault.com/a/1190000015684864 一.生命周期 先贴两张图: vue生命周期 小程序生命周期 相比之下,小程序的钩子函数要简单得多. vue ...

  5. 梳理vue双向绑定的实现原理

    Vue 采用数据劫持结合发布者-订阅者模式的方式来实现数据的响应式,通过Object.defineProperty来劫持数据的setter,getter,在数据变动时发布消息给订阅者,订阅者收到消息后 ...

  6. EngJS(超轻量) 中数据双向绑定如何使用

    Eng github 所有支持数据双向绑定的js工具 ,触发双向关系的基本方式无外乎 wather关系 和  事件关系 两种 . 前者操作数据时 ,后者触发事件时. 下面简单 的介绍Eng 中 的 w ...

  7. vue生命周期及双向绑定

    这篇文章不是原创,看了其他人的分析贴,记录下自己学到的.本篇主要记录一下vue内部流程,以及双向绑定原理.Vue的可爱之处在于他的双向绑定及Virtual DOM的思想. vue内部流程 如图所示,实 ...

  8. vue中props的双向绑定

    在vue的学习中,一开始我是自己写组件练手的,在这个过程中我遇到一个问题: props:父组件传递给子组件参数 (1)props直接在子组件里直接使用是可以实时更新的 (2)props如果在creat ...

  9. v-model双向绑定原理_Vue数据绑定

    这是一篇简单的学习笔记.在学习一段时间Vue后,尝试实现一下Vue的数据绑定. 相关源码:https://github.com/buchuitoudegou/Data-Binding-demo Vue ...

最新文章

  1. android 5秒后进入,Android/Java:如何在5秒后停止下载?
  2. MacBook Pro休眠掉电、耗电量大问题解决方案
  3. jvm性能调优实战 - 23 模拟Young GC的发生及分析GC日志
  4. web页面 float定位导致“溢出现象”处理
  5. Boost:字符串的RLE压缩的测试程序
  6. SQL Server上的审计表和数据版本控制
  7. raster | 栅格对象如何用于非空间模型的预测?
  8. 解析Linux内核的基本的模块管理与时间管理操作---超时处理【转】
  9. 基于visual Studio2013解决面试题之1401冒泡排序
  10. springAOP,面向切面编程详解,通俗易懂
  11. 3dmax导入REVIT
  12. 道通诉大疆337调查之专利分析
  13. Linux:解决centos7每次更换IP方法
  14. 【C++11】之 emplace_back() 与 push_back() 的区别
  15. svg中marker元素的理解
  16. Information Communication Technology,简称ICT
  17. eclipse和myeclipse的he user operation is wating问题
  18. 全国计算机一级学科博士点,一级学科博士点高校排名
  19. linux服务器的Gzip文件压缩方法[转]
  20. 路由器和三层交换机的搞笑文章

热门文章

  1. java default string_Java--default详解
  2. 集中式自动抄表系统原理与应用
  3. 【链塔DApp日报】BDI指数增长5%,Chintai 24h交易额增长251%
  4. 【线性代数/计算复杂性理论】积和式的指数时间算法:Ryser算法
  5. C#里Directory类的常用方法
  6. 读书的意义(转载于B站)
  7. 牛逼顿 [转此怀念牛顿]
  8. JavaScript 转换数字为整数的方法
  9. 基于vue开发的移动端(仿蘑菇街,淘宝)电商项目
  10. python sobel算子_利用sobel算子计算图像的梯度(python+opencv)