数据绑定是分离UI和后端主逻辑程序的一种好的办法。这里总结下TextBox, Label, ComboBox, ListBox, DataGridView的数据绑定

数据绑定都是通过DB来和UI控件的属性进行绑定的。因此都需要MySqlDataAdapter的Fill函数得到数据源DataTable并进行绑定

1. TextBox和Label

没有找到与DataTable里任意一行的数据绑定,只能与第一行进行绑定,如果每次都是需要通过MySqlDataAdapter来从数据库取数据,再用Fill函数来给DataTable充数据,再绑定到TextBox,显得太麻烦了。

Label和TextBox一样,都可以通过Control.DataBinding.Add("Text", dt, "Column");就完成绑定了

如果要绑定到一个类的属性上,则用

textBox1.DataBinding.Add("Text", person, "Name", true, DataSourceUpdateMode.OnpropertyChanged);

在程序对类的属性值进行修改后,控件通过textBox.DataBinding["Text"].ReadValue();来更新值,如果在控件上进行修改,离开控件焦点后会自动更新属性值

2. ComboBox和ListBox

comboBox1.DataSource = dt;
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Name";

注意这里DisplayMember指的是ComboBox上显示的Item值,而ValueMember是实际的值。

ListBox用法跟ComboBox一样

这里可以注意到一个有趣的问题,当ListBox上选择Item的时候,ComboBox,TextBox和Label选的值也跟着一起变了,这可能是因为他们都从同一个数据源绑定的数据,而选择值时是会影响到DataTable的Select方法,进而影响到其他绑定控件,因此可以新建个DataTable,这样就不会影响到了。

ListBox的DataSource还能使enum等

listBox1.DataSource = Enum.GetValues(typeof(Week));

3. DataGridView

bindingSource1.DataSource = dt;
dataGridView1.DataSource = bindingSource1;

如果要通过dataGridView来修改数据库,当然我们可以通过写SQL语句,但是这里可以通过MySqlCommandBuilder myBuilder = new MySqlCommandBuilder(adapter);来修改数据库了

DataGridView修改后,我们首先要确定已经修改完成了,再update到DB,再change DT里

((BindingSource)dataGridView1.DataSource).EndEdit();
adapter.Update(dt);
dt.AcceptChanges();

最后我做了一个demo程序

 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;
 using System.Diagnostics;
 using MySql.Data;
 using MySql.Data.MySqlClient;

 namespace ControlTest
 {
     public partial class Form1 : Form
     {
         DataTable dt = new DataTable();
         static MySqlConnection mycon = null;
         MySqlDataAdapter adapter;
         public Form1()
         {
             InitializeComponent();
          }

         private void Form1_Load(object sender, EventArgs e)
         {
             mycon = new MySqlConnection("server = 127.0.0.1; uid = root; pwd = 0219; database = persons");
             mycon.Open();
             adapter = new MySqlDataAdapter("select * from students", mycon);
             MySqlCommandBuilder myBuilder = new MySqlCommandBuilder(adapter);
             adapter.Fill(dt);
             textBox1.DataBindings.Add("Text", dt, "Grade");
             label1.DataBindings.Add("Text", dt, "Grade");
             comboBox1.DataSource = dt;
             comboBox1.DisplayMember = "Name";
             comboBox1.ValueMember = "Name";
             DataTable listDt = new DataTable();
             adapter.Fill(listDt);
             listBox1.DataSource = listDt;
             listBox1.DisplayMember = "Name";
             listBox1.ValueMember = "Name";
             bindingSource1.DataSource = dt;
             dataGridView1.DataSource = bindingSource1;
             mycon.Close();
         }

         private void button1_Click(object sender, EventArgs e)
         {
             mycon.Open();
             string query = "update students set Grade = 88 where Name = 'yangzihao'";
             MySqlCommand mycmd = new MySqlCommand(query, mycon);
             mycmd.ExecuteNonQuery();
             dt.Clear();
             adapter.Fill(dt);
             mycon.Close();
         }

         private void button2_Click(object sender, EventArgs e)
         {
             ((BindingSource)dataGridView1.DataSource).EndEdit();
             adapter.Update(dt);
             dt.AcceptChanges();
         }

         private void button3_Click(object sender, EventArgs e)
         {
             MessageBox.Show(comboBox1.SelectedValue.ToString());
         }

     }
 }

C#: 数据绑定的更多相关文章

  1. UWP中新加的数据绑定方式x:Bind分析总结

    UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...

  2. MVVM模式和在WPF中的实现(二)数据绑定

    MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  3. 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定

    一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...

  4. vue双向数据绑定原理探究(附demo)

    昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与 ...

  5. 【Win 10应用开发】分阶段进行数据绑定

    使用x:Bind扩展标记进行数据绑定,是在编译阶段完成,至于说性能优化方面,大概主要是优化CPU资源的使用,因为免去了运行阶段进行绑定的过程.当然,使用这个标记仅仅是绑定上的优化,并不包括数据源.数据 ...

  6. WPF入门:数据绑定

    上一篇我们将XAML大概做了个了解 ,这篇将继续学习WPF数据绑定的相关内容 数据源与控件的Binding Binding作为数据传送UI的通道,通过INotityPropertyChanged接口的 ...

  7. SAP CRM 客户控制器与数据绑定

    当用户从视图离开时,视图将失去它的数据.解决这个问题,需要引入客户控制器(Custom Controller)(译者注:SAP CRM客户端中,不同地方的Custom Controller会翻译为“客 ...

  8. AngularJS 系列 01 - HelloWorld和数据绑定

    目录导读: AngularJS 系列 学习笔记 目录篇 前言: 好记性不如烂键盘,随笔就是随手笔记,希望以后有用. 本篇目录: 1. Hello World 2. AngularJS中的数据绑定 3. ...

  9. 双向数据绑定(angular,vue)

    最近github上插件项目更新了关于双向数据绑定的实现方式,关于angular和vue. angular众所周知是使用的脏检查($dirty).一开始大家会认为angular开启了类似setInter ...

  10. WindowsForm多窗体、多窗体传值、控件数据绑定--2016年12月8日

    多窗体 Show Form1 f1 = new Form1(); f1.Show(); ShowDialog--在父窗体之上 Form1 f1 = new Form1(); f1.ShowDialog ...

随机推荐

  1. 【转】javascript 中that的含义示例介绍

    var that = this;,这代表什么意思呢?this代表的是当前对象,var that=this就是将当前的this对象复制一份到that变量中,下面为大家介绍这样做有什么意义 你可能会发现别 ...

  2. IOS NSDate NSDateFormatter 导致相差8小时

    时间问题应该是所有编程语言都要处理的.详细学过php的同学知道,php中也会有相差8小时的问题,然而php可以非常方便的解决的,直接设置下就好了 我最近在学习IOS的过程中,发现IOS的日期处理也是个 ...

  3. zabbix-agent passive

    http://www.cnblogs.com/mysql-dba/p/5010902.html http://blog.chinaunix.net/uid-29155617-id-4668602.ht ...

  4. 【Java 基础篇】【第二课】基本数组类型

    就像第一章所说一样,这次学习为了快,因此说明性的文字就不想写太多了,直接帖代码吧,代码当中尽量加一些注释: package a.b; public class test { static void B ...

  5. Tinyxml的简单应用

    参考文章: 1-> http://www.cnblogs.com/phinecos/archive/2008/03/11/1100912.html 2-> http://blog.csdn ...

  6. Linux Socket过程详细解释(包括三次握手建立连接,四次握手断开连接)

    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web 服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠s ...

  7. QFile文件操作-QT

    #include <QCoreApplication> #include<QFile> #include<QString> #include<QDebug&g ...

  8. How to disable and clear query ranges in sysquery form

    query = new query('Query name'); queryBuildDataSource = query.dataSourceTable(tableNum('table name') ...

  9. Linq世界走一走

    什么是Linq?它是用来做什么的?怎么用? Linq的优点是不管数据源是什么,都可以统一查询.换言之,它是一种包含一套标准查询操作符的查询语言,可以对多个数据源进行查询 ⑴Linq俗称语言集成查询(L ...

  10. Object类型(对象)

    ECMAscript中的对象其实就是一组数据和功能集合.这里简单谈谈对象,复杂以后补充. 1 如何创建对象 简单创建: var box = {}; alert(box); //[object obje ...