a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

C# DataGridView綁定數(shù)據(jù)源的方法

2019-10-29 19:58:58
字體:
供稿:網(wǎng)友

開始以前,先認(rèn)識一下WinForm控件數(shù)據(jù)綁定的兩種形式,簡單數(shù)據(jù)綁定和復(fù)雜數(shù)據(jù)綁定。

1. 簡單的數(shù)據(jù)綁定

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

簡單的數(shù)據(jù)綁定是將用戶控件的某一個屬性綁定至某一個類型實(shí)例上的某一屬性。

采用如下形式進(jìn)行綁定:引用控件.DataBindings.Add("控件屬性", 實(shí)例對象, "屬性名", true);

例2

從數(shù)據(jù)庫中把數(shù)據(jù)讀出來放到一個數(shù)據(jù)集中,比如List<>、DataTable,DataSet,我一般用List<>,

然后綁定數(shù)據(jù)源:

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

如果你沒有設(shè)置DataGridView的列,它會自動生成所有列。

2. 復(fù)雜數(shù)據(jù)綁定

復(fù)雜的數(shù)據(jù)綁定是將一個以列表為基礎(chǔ)的用戶控件(例如:ComboBox、ListBox、ErrorProvider、DataGridView等控件)綁定至一個數(shù)據(jù)對象的列表。 

基本上,Windows Forms的復(fù)雜數(shù)據(jù)綁定允許綁定至支持IList接口的數(shù)據(jù)列表。此外,如果想通過一個BindingSource組件進(jìn)行綁定,還可以綁定至一個支持IEnumerable接口的數(shù)據(jù)列表。 

對于復(fù)雜數(shù)據(jù)綁定,常用的數(shù)據(jù)源類型有(代碼以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接口(包括一維數(shù)組,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接口(包括一維數(shù)組,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是一個結(jié)構(gòu)類型DictionaryEntry,同樣的DictionaryEntry并不能直接賦值給Combobox的DataSource,但通過BindingSource仍然可以間接實(shí)現(xiàn)。 這是因為:

BindingSource可以作為一個強(qiáng)類型的數(shù)據(jù)源。其數(shù)據(jù)源的類型通過以下機(jī)制之一固定。使用 Add 方法可將某項添加到 BindingSource 組件中。 

將 DataSource 屬性設(shè)置為一個列表、單個對象或類型。(這三者并不一定要實(shí)現(xiàn)IList或IListSource) 

這兩種機(jī)制都創(chuàng)建一個強(qiáng)類型列表。BindingSource 支持由其 DataSource 和 DataMember 屬性指示的簡單數(shù)據(jù)綁定和復(fù)雜數(shù)據(jù)綁定。 

總結(jié):

根據(jù)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;// 設(shè)置了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. 實(shí)例

3.1 手動給dataGridView綁定數(shù)據(jù)源的方法

C#中手動給dataGridView綁定數(shù)據(jù)源,能夠很自由地進(jìn)行操作,但展示數(shù)據(jù)并沒有C#自動添加數(shù)據(jù)源那么方便??捎袝r為了方便操作數(shù)據(jù),我們更愿意手動連接數(shù)據(jù)源,代碼如下:

conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Restaurant.mdb");//建立數(shù)據(jù)庫連接 cmd = new OleDbCommand("select * from data", conn);//執(zhí)行數(shù)據(jù)連接 DataSet ds = new DataSet(); OleDbDataAdapter da = new OleDbDataAdapter(cmd); da.Fill(ds);this.dataGridView1.DataSource = ds.Tables[0];//數(shù)據(jù)源 this.dataGridView1.AutoGenerateColumns = false;//不自動 conn.Close();//關(guān)閉數(shù)據(jù)庫連接 

說明:解決DataGridView綁定了數(shù)據(jù)源無法更新保存當(dāng)前行的問題

this.dataGridView.currentCell=null;//該行的作用是取消datagridview行的編輯狀態(tài) adapter.Update(userTable); 

3.2 利用泛型集合向DataGridView中添加數(shù)據(jù)

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);        //在這里必須創(chuàng)建一個BindIngSource對象,用該對象接收Dictionary<>泛型集合的對象   BindingSource bs = new BindingSource();        //將泛型集合對象的值賦給BindingSourc對象的數(shù)據(jù)源   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中添加數(shù)據(jù) 

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到c#教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久99国产一区二区三区 | 国产精品视频免费看 | 国产精品无码永久免费888 | 欧美日韩免费在线 | 91丁香| 国产精品粉嫩白浆在线观看 | 国产乱码一区二区三区 | 成人 在线 | 丁香婷婷久久久综合精品国产 | eee女女色www网站 | 欧美综合影院 | 中文字幕在线播放第一页 | 嫩草影院网站入口 | 黄色网址av | 最新国产福利在线 | 日本99精品 | 亚洲专区国产精品 | 久久视频在线 | 精品黑人一区二区三区久久 | 国产精品视频久久久 | 天天干夜夜爽 | 国产三级在线播放 | 超碰天堂| 日韩成人不卡 | 国产成人亚洲综合 | 久久不射电影网 | 久久亚洲国产精品日日av夜夜 | 97狠狠 | 在线不卡av | 精品国产一区二区三区久久影院 | 青娱乐青青草 | 日韩精品久久久 | www.精品| 成人欧美一区二区三区黑人麻豆 | 国产精品视频免费观看 | 日韩欧美一区二区视频 | 国产精品久久久av | 午夜妇女aaaa区片 | 国产激情视频 | 欧美一区二区二区 | 中文字幕在线观看免费视频 |