亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# DataGridView綁定數據源的方法

2019-10-29 19:58:58
字體:
來源:轉載
供稿:網友

開始以前,先認識一下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// 方式1DataSet ds=new DataSet ();this.dataGridView1.DataSource=ds.Table[0];this.dataGridView1.DataSource = ds.Tables["表名"];// 方式2DataTable dt=new DataTable();this.dataGridView1.DataSource=dt;// DataViewDataView dv = new DataView();this.dataGridView1.DataSource = dv;// 設置了DataMemberDataSet ds=new DataSet ();this.dataGridView1.DataSource = ds;this.dataGridView1.DataMember = "表名";// ArrayListArrayList Al = new ArrayList();this.dataGridView1.DataSource = Al;// dicDictionary<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#自動添加數據源那么方便??捎袝r為了方便操作數據,我們更愿意手動連接數據源,代碼如下:

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]; }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人综合av| 福利一区福利二区微拍刺激| 国产精品久久久久久搜索| 久久噜噜噜精品国产亚洲综合| 久久久久99精品久久久久| 超薄丝袜一区二区| 久久久久久久一| 欧美俄罗斯性视频| 在线观看视频亚洲| 91九色国产在线| 日韩av在线不卡| 亚洲国产精品yw在线观看| 亚洲乱码一区二区| 亚洲性日韩精品一区二区| 久久国产精品偷| 日韩在线视频导航| 91久久精品国产91性色| 欧美日韩国产精品一区二区不卡中文| 国产精品自拍视频| 91久久国产婷婷一区二区| 日韩中文在线中文网在线观看| 色香阁99久久精品久久久| 欧美在线观看日本一区| 91色琪琪电影亚洲精品久久| 人体精品一二三区| 日韩欧美一区视频| 国产精品美女视频网站| 色偷偷噜噜噜亚洲男人的天堂| 国产精品av在线| 成人激情在线播放| 九九久久久久99精品| 性色av一区二区三区在线观看| 九九热最新视频//这里只有精品| 亚洲国产天堂久久综合网| 国产一区二区三区在线观看网站| 成人精品久久av网站| 亚洲aⅴ男人的天堂在线观看| 亚洲人成电影网站色…| 亚洲国产精品99| 国产97在线|亚洲| 欧美成人国产va精品日本一级| 国产精品99久久久久久白浆小说| 一区二区亚洲欧洲国产日韩| 国产日本欧美一区二区三区| 精品久久久久久久久国产字幕| 亚洲高清一二三区| 免费av在线一区| 综合欧美国产视频二区| 午夜精品一区二区三区在线| 国产精品久久久久久婷婷天堂| 亚洲欧美一区二区三区在线| 日韩在线视频中文字幕| 国语对白做受69| 欧美性极品xxxx做受| 韩剧1988免费观看全集| 97精品欧美一区二区三区| 亚洲人永久免费| 伊人亚洲福利一区二区三区| 欧美有码在线观看| 精品小视频在线| 亚洲最大福利视频| 91精品国产综合久久香蕉922| 中文字幕日韩欧美在线| 日韩欧美高清在线视频| 91爱视频在线| 精品日韩美女的视频高清| 久久视频免费观看| 国产亚洲成精品久久| 91精品视频免费| 91精品国产91久久久久久最新| 国产原创欧美精品| 久久成人免费视频| 亚洲欧美日韩网| 欧美视频在线观看 亚洲欧| 亚洲成人精品视频在线观看| 亚洲va欧美va国产综合剧情| 91高清视频在线免费观看| 欧美黄色片视频| 日本欧美爱爱爱| 狠狠干狠狠久久| 久久偷看各类女兵18女厕嘘嘘| 97久久精品人人澡人人爽缅北| 国产精品成av人在线视午夜片| 国产一区二区丝袜| 国产视频欧美视频| 日韩有码在线视频| 精品国产一区二区三区久久狼5月| 欧美成人午夜剧场免费观看| 国产亚洲精品成人av久久ww| 18性欧美xxxⅹ性满足| 亚洲国产精品久久久久久| 欧美在线性爱视频| 久久国产加勒比精品无码| 日韩中文字幕精品视频| 日产精品99久久久久久| 精品国产区一区二区三区在线观看| 日韩亚洲在线观看| 欧美猛交免费看| 欧美电影在线观看完整版| www.亚洲天堂| 亚洲欧美成人一区二区在线电影| 精品福利视频导航| 亚洲精品日韩久久久| 裸体女人亚洲精品一区| 77777少妇光屁股久久一区| 久久综合伊人77777| 国产深夜精品福利| 日韩电影网在线| 97成人精品区在线播放| 亚洲午夜未满十八勿入免费观看全集| 国产精品入口尤物| 国产有码一区二区| 少妇高潮 亚洲精品| 久久偷看各类女兵18女厕嘘嘘| 国产精品久久999| 国产精品久久久91| 亚洲精品v天堂中文字幕| 亚洲永久在线观看| 亚洲第一区中文99精品| 97视频在线观看免费高清完整版在线观看| 久久久噜噜噜久噜久久| 日韩高清不卡av| 精品久久久久久久中文字幕| 成人羞羞国产免费| 国产精品高清在线| 国产视频精品免费播放| 亚洲国产成人精品女人久久久| 97久久精品在线| 久久久久久国产精品美女| 国产精品露脸自拍| 欧美肥臀大乳一区二区免费视频| 国产精品一区电影| 庆余年2免费日韩剧观看大牛| 日韩欧美在线观看| 精品女厕一区二区三区| 成人免费视频97| 亚洲小视频在线| 久久天天躁日日躁| 色诱女教师一区二区三区| 成人午夜一级二级三级| 久久免费精品视频| 8x海外华人永久免费日韩内陆视频| 91精品国产91久久久久久不卡| 97国产suv精品一区二区62| 色偷偷88888欧美精品久久久| 亚洲欧美在线磁力| 欧美日韩人人澡狠狠躁视频| 91av在线视频观看| 91精品国产91| 日韩精品高清视频| 午夜精品久久久久久久白皮肤| 青青久久av北条麻妃黑人| 国产做受高潮69| 一色桃子一区二区| 久久成人国产精品| 国自在线精品视频| 国产精品羞羞答答| 欧美极品欧美精品欧美视频| 国产精品久久久久久久久久久久久久| 国产精品久久久久久久久久东京| 成人亚洲欧美一区二区三区| 国产精品91一区| 久久韩国免费视频| 色天天综合狠狠色|