winform中的数据绑定

1. 简单的数据绑定

例1

复制代码
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connStr"].ToString())) 
{  SqlDataAdapter sda = new SqlDataAdapter("Select * From T_Class Where F_Type='Product' order by F_RootID,F_Orders", conn); DataSet Ds = new DataSet(); sda.Fill(Ds, "T_Class"); //使用DataSet绑定时,必须同时指明DateMember this.dataGridView1.DataSource = Ds; this.dataGridView1.DataMember = "T_Class"; //也可以直接用DataTable来绑定 this.dataGridView1.DataSource = Ds.Tables["T_Class"]; 
} 
复制代码

  简单的数据绑定是将用户控件的某一个属性绑定至某一个类型实例上的某一属性

  采用如下形式进行绑定:引用控件.DataBindings.Add("控件属性", 实例对象, "属性名", true); 

 

 例2

  从数据库中把数据读出来放到一个数据集中,比如List<>、DataTable,DataSet,我一般用List<>,
  然后绑定数据源:

IList<student> sList=StudentDB.GetAllList();
DataGridView.DataSource=sList;

 

  如果你没有设置DataGridView的列,它会自动生成所有列。

2. 复杂数据绑定 


  复杂的数据绑定是将一个以列表为基础的用户控件(例如:ComboBox、ListBox、ErrorProvider、DataGridView等控件)绑定至一个数据对象的列表。 
  基本上,Windows Forms的复杂数据绑定允许绑定至支持IList接口的数据列表。此外,如果想通过一个BindingSource组件进行绑定,还可以绑定至一个支持IEnumerable接口的数据列表。 
  对于复杂数据绑定,常用的数据源类型有(代码以DataGridView作为示例控件)。

复制代码
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.Collections; namespace DataGridViewBindingData 
{ 
public partial class Form1 : Form 
{ 

public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //this.dataGridView1.DataSource = DataBindingByList1(); //this.dataGridView1.DataSource = DataBindingByList2(); //this.dataGridView1.DataSource = DataBindingByDataTable(); this.dataGridView1.DataSource = DataBindingByBindingSource(); } /// <summary> /// IList接口(包括一维数组,ArrayList等) /// </summary> /// <returns></returns> private ArrayList DataBindingByList1() { ArrayList Al = new ArrayList(); Al.Add(new PersonInfo("a","-1")); Al.Add(new PersonInfo("b","-2")); Al.Add(new PersonInfo("c","-3")); return Al; } /// <summary> /// IList接口(包括一维数组,ArrayList等) /// </summary> /// <returns></returns> private ArrayList DataBindingByList2() { ArrayList list = new ArrayList(); for (int i = 0; i < 10; i++) { list.Add(new DictionaryEntry(i.ToString(),i.ToString()+"_List")); } return list; } /// <summary> /// IListSource接口(DataTable、DataSet等) /// </summary> /// <returns></returns> private DataTable DataBindingByDataTable() { DataTable dt = new DataTable(); DataColumn dc1 = new DataColumn("Name"); DataColumn dc2 = new DataColumn("Value"); dt.Columns.Add(dc1); dt.Columns.Add(dc2); for (int i = 1; i <= 10; i++) { DataRow dr = dt.NewRow(); dr[0] = i; dr[1] = i.ToString() + "_DataTable"; dt.Rows.Add(dr); } return dt; } /// <summary> /// IBindingListView接口(如BindingSource类) /// </summary> /// <returns></returns> private BindingSource DataBindingByBindingSource() { Dictionary<string, string> dic = new Dictionary<string, string>(); for (int i = 0; i < 10; i++) { dic.Add(i.ToString(),i.ToString()+"_Dictionary"); } return new BindingSource(dic,null);
}
} }
复制代码

  

  上面代码中BindingSource的Datasource是一个结构类型DictionaryEntry,同样的DictionaryEntry并不能直接赋值给Combobox的DataSource,但通过BindingSource仍然可以间接实现。 这是因为: 
  BindingSource可以作为一个强类型的数据源。其数据源的类型通过以下机制之一固定。使用 Add 方法可将某项添加到 BindingSource 组件中。 
  将 DataSource 属性设置为一个列表、单个对象或类型。(这三者并不一定要实现IList或IListSource) 
  这两种机制都创建一个强类型列表。BindingSource 支持由其 DataSource 和 DataMember 属性指示的简单数据绑定和复杂数据绑定。

 

总结:

根据DataSource绑定的对象的不同,可以有一下几种简单的绑定:

复制代码
// DataSet 、DataTable// 方式1
DataSet ds=new DataSet ();
this.dataGridView1.DataSource=ds.Table[0];
this.dataGridView1.DataSource = ds.Tables["表名"];//  方式2
DataTable dt=new DataTable();
this.dataGridView1.DataSource=dt;// DataView
DataView dv = new DataView();
this.dataGridView1.DataSource = dv;// 设置了DataMember
DataSet ds=new DataSet ();
this.dataGridView1.DataSource = ds;
this.dataGridView1.DataMember = "表名";// ArrayList
ArrayList Al = new ArrayList();
this.dataGridView1.DataSource = Al;// dic
Dictionary<string, string> dic = new Dictionary<string, string>();
this.dataGridView1.DataSource = dic;// List<Object>
this.dataGridVi.DataSource = new BindingList<Object>(List<Object>);
复制代码

 

3. 实例

3.1 手动给dataGridView绑定数据源的方法

c#中手动给dataGridView绑定数据源,能够很自由地进行操作,但展示数据并没有C#自动添加数据源那么方便。可有时为了方便操作数据,我们更愿意手动连接数据源,代码如下:

复制代码
conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Restaurant.mdb");//建立数据库连接  
cmd = new OleDbCommand("select * from data", conn);//执行数据连接  
DataSet ds = new DataSet();  
OleDbDataAdapter da = new OleDbDataAdapter(cmd);  
da.Fill(ds);
this.dataGridView1.DataSource = ds.Tables[0];//数据源 this.dataGridView1.AutoGenerateColumns = false;//不自动 conn.Close();//关闭数据库连接
复制代码

说明:

解决DataGridView绑定了数据源无法更新保存当前行的问题

this.dataGridView.currentCell=null;//该行的作用是取消datagridview行的编辑状态  
adapter.Update(userTable);  

3.2 利用泛型集合向DataGridView中添加数据

List<>泛型集合:

复制代码
private void Form1_Load(object sender, EventArgs e)  
{  //使用List<>泛型集合填充DataGridView  List<Student> students = new List<Student>();  Student hat = new Student("Hathaway", "12", "Male");  Student peter = new Student("Peter","14","Male");  Student dell = new Student("Dell","16","Male");  Student anne = new Student("Anne","19","Female");  students.Add(hat);  students.Add(peter);  students.Add(dell);  students.Add(anne);  this.dataGridView1.DataSource = students;  
}
复制代码

Dictionary<>泛型集合

复制代码
private void Form1_Load(object sender, EventArgs e)  
{  //使用Dictionary<>泛型集合填充DataGridView  Dictionary<String, Student> students = new Dictionary<String, Student>();  Student hat = new Student("Hathaway", "12", "Male");  Student peter = new Student("Peter","14","Male");  Student dell = new Student("Dell","16","Male");  Student anne = new Student("Anne","19","Female");  students.Add(hat.StuName,hat);  students.Add(peter.StuName,peter);  students.Add(dell.StuName,dell);  students.Add(anne.StuName,anne);  //在这里必须创建一个BindIngSource对象,用该对象接收Dictionary<>泛型集合的对象  BindingSource bs = new BindingSource();  //将泛型集合对象的值赋给BindingSourc对象的数据源  bs.DataSource = students.Values;  this.dataGridView1.DataSource = bs;  
}
复制代码

3.3 利用SqlDataReader填充DataGridView 

复制代码
//使用SqlDataReader填充DataGridView  
using (SqlCommand command = new SqlCommand("select * from product", DBService.Conn))  
{  SqlDataReader dr = command.ExecuteReader();  BindingSource bs = new BindingSource();  bs.DataSource = dr;  this.dataGridView1.DataSource = bs;  
}
复制代码

3.4 利用SqlDataAdapter对象向DataGridView中添加数据 

using (SqlDataAdapter da = new SqlDataAdapter("select * from Product", DBService.Conn))  
{  DataSet ds = new DataSet();  da.Fill(ds);  this.dataGridView1.DataSource = ds.Tables[0];  
}

 

转载于:https://www.cnblogs.com/lfxiao/p/7422733.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jQuery数据表和Java集成

jQuery DataTables是一个开放源代码插件&#xff0c;用于在浏览器中创建表。 它具有许多功能&#xff0c;例如排序&#xff0c;服务器端处理&#xff0c; JQUERY UI主题滚动。 该插件的下载链接&#xff1a; http://www.datatables.net/download/ 在本演示中&#xff0c;我…

CSS 属性 - 伪类和伪元素的区别

伪元素和伪类之所以这么容易混淆&#xff0c;是因为他们的效果类似而且写法相仿&#xff0c;但实际上 css3 为了区分两者&#xff0c;已经明确规定了伪类用一个冒号来表示&#xff0c;而伪元素则用两个冒号来表示。 :Pseudo-classes ::Pseudo-elements 但因为兼容性的问题&…

class-感知机Perception

1 感知机模型1.1 模型定义2 感知机学习策略2.1 数据的线性可分性2.2 学习策略3 学习算法3.1 算法原始形式3.2 收敛性3 学习算法的对偶形式1 感知机模型 感知机perceptron是二类分类问题的线性分类模型&#xff0c;输入为实例的特征向量&#xff0c;输出为实例的类别&#xff08…

Java中的方法调用有多昂贵

我们都去过那儿。 在查看设计不良的代码的同时&#xff0c;听听作者对人们永远不应该牺牲性能而不是设计的解释。 而且&#xff0c;您不能说服作者摆脱其500行方法&#xff0c;因为链接方法调用会破坏性能。 好吧&#xff0c;这可能在1996年左右是正确的。 但是自那时以来&…

1.HTML

HTML简介 hyper text markup language 即超文本标记语言。 超文本: 就是指页面内可以包含图片、链接&#xff0c;甚至音乐、程序等非文字元素。 标准模板 <!DOCTYPE html> <html lang"en"><head> <meta charset"U…

php记住表单数据cookie,【PHP基础】cookies和session

1.Cookiescookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时&#xff0c;它同时会发送 cookie。通过 PHP&#xff0c;您能够创建并取回 cookie 的值。1.1、如何创建 cookie&#xff1f;setcookie() 函数用于设置 cookie。…

C#调用Power Shell 管理Office365 执行脚本时遇到的问题

Power Shell管理Office参考http://www.mamicode.com/info-detail-494553.html C#调用Power Shell 参考 https://www.cnblogs.com/chenkai/archive/2010/11/09/1872471.html string pwd "**********";string userName "**********";StringBuilder ss new…

javaweb(三十七)——获得MySQL数据库自动生成的主键

测试脚本如下&#xff1a; 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码&#xff1a; 1 package me.gacl.demo;2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; …

基于Matlab的模拟通信实验平台设计,【通信原理仿真实验】通信原理虚拟实验仿真平台的设计和实现_玛雅作文网...

作文「通信原理虚拟实验仿真平台的设计和实现」共有 4564 个字&#xff0c;其中有 2704 个汉字&#xff0c;1316 个英文&#xff0c;162 个数字&#xff0c;382 个标点符号。作者佚名&#xff0c;请您欣赏。玛雅作文网荟萃众多优秀学生作文&#xff0c;如果想要浏览更多相关作文…

2018/3/1 省选模拟考试 50分

T1 30分模拟暴力&#xff0c;40分树的直径。拿了0分。&#xff08;空间开小了爆了&#xff0c;因为缩点之后是又建了一次图&#xff0c;两个边的编号tot没分开&#xff0c;mdzz&#xff09; 只写了后40分&#xff0c;而这40分中有20分不需要边双连通分量。写了一个类似于强连通…

骆驼和春天的Drools决策表

正如我在之前的文章中所展示的那样&#xff0c; JBoss Drools是一个非常有用的规则引擎 。 唯一的问题是&#xff0c;对于非技术人员而言&#xff0c;以Rule语言创建规则可能会非常复杂。 这就是为什么可以提供一种轻松的方式来创建业务规则的方法-在电子表格中创建决策表&…

酷炫,用Html5/CSS实现文字阴影

前两天有一个学html5前端小美女问我一个有关文字阴影的效果怎么去实现。她和我说文字阴影嘛,她也知道text-shadow,.但是却做不出想要的样子,其实css3的新功能是很强大的,不要把你的思想太过于局限化,好了,闲话也不多说,咱们就先来看看这个文本阴影. 一.文字阴影text-shadow 文…

从xtrabackup备份恢复单表【转】

目前对MySQL比较流行的备份方式有两种&#xff0c;一种上是使用自带的mysqldump&#xff0c;另一种是xtrabackup&#xff0c;对于数据时大的环境&#xff0c;普遍使用了xtrabackupbinlog进行全量或者增量备份&#xff0c;那么如何快速的从xtrabackup备份中恢复单张表呢&#xf…

CSS中的overflow属性

overflow属性 如果元素中的内容超出了给定的宽度和高度属性&#xff0c;overflow 属性可以确定是否显示滚动条&#xff0c;是否隐藏溢出部分等行为&#xff0c;规定当内容溢出元素框时发生的事情。 可能的值有&#xff1a; visible&#xff1a;默认值。内容不会被修剪&#xff…

【知识梳理1】Android触摸事件机制

前言 随着科学技术的发展&#xff0c;智能手机早已成为我们当代人身边不可缺少的“伙伴”之中的一个&#xff0c;堪比对象女友。每天我们对着手机反复的做着点击、滑动操作&#xff0c;而手机则随着我们的操作给我们展示她的精彩。… 废话到此结束。 看到这里&#xff0c;即使…

自己做的一个登录页面,纯代码!

先上效果图吧. 本人菜鸟入门, 请勿喷. 首先样式: 1 1 body{2 2 margin: 0;3 3 padding: 0;4 4 width: 100%;5 5 height: 100%;6 6 }7 7 8 8 .headers{9 9 width: 100%;10 10 height: 100px;11 11 }12 12 .siv-ng{13 13 width:…

ASP.NET调用cmd命令提示符拒绝访问解决方案

using System.Diagnostics; public class CmdHelper{private static string CmdPath "C:\Windows\System32\cmd.exe";/// <summary>/// 执行cmd命令/// 多命令请使用批处理命令连接符&#xff1a;/// <![CDATA[/// &:同时执行两个命令/// |:将上一个命…

Some reading, some thinking.

update&#xff1a;感谢助教0 0又学会一招&#xff0c;play 了一下CSS Part 1 Reading AuthorArticleNoteMadcola《两年波折路&#xff08;考研、工作、考研&#xff09;》"吾志所向&#xff0c;一往无前&#xff1b;愈挫愈奋&#xff0c;再接再励。"辜新星《时刻调…

CSS选择器:伪类(图文详解)

本文最初发表于博客园&#xff0c;并在GitHub上持续更新前端的系列文章。欢迎在GitHub上关注我&#xff0c;一起入门和进阶前端。 以下是正文。 伪类&#xff08;伪类选择器&#xff09; 伪类&#xff1a;同一个标签&#xff0c;根据其不同的种状态&#xff0c;有不同的样式。…

DIV固定宽度和动态拉伸混合水平排列

1.效果图 2.源代码 html <h2>1.头部固定&#xff0c;尾部拉伸</h2> <div class"container" id"div1"><div class"head"></div><div class"tail"></div> </div><h2>2.尾部固定…