<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
使用DataGridView控制元件,可以顯示和編輯來自多種不同型別的資料來源的表格資料。
將資料繫結到DataGridView控制元件非常簡單和直觀,在大多數情況下,只需設定DataSource屬性即可。在繫結到包含多個列表或表的資料來源時,只需將DataMember屬性設定為指定要繫結的列表或表的字串即可。
所謂的非繫結模式就是DataGridView控制元件顯示的資料不是來自於繫結的資料來源,而是可以通過程式碼手動將資料填充到DataGridView控制元件中,這樣就為DataGridView控制元件增加了很大的靈活性。我們先來了解一下DataGridView控制元件有多種型別的列,而這些型別都是間接的或直接的繼承了DataGridViewColumns累,下面是我們能夠經常用到的幾種型別:
類 | 說明 |
DataGridViewTextBoxColumn | 與基於文字的值一起使用,在繫結到數位和字串型別的值時自動生成 |
DataGridViewCheckBoxColumn | 與boolean和checkState值一起使用,在繫結到這些型別的值時自動生成 |
DataGridViewImageColumn | 用於顯示影象,在繫結到位元組陣列、Image物件或Icon物件自動生成 |
DataGridViewButtonColumn | 用於在單元格中顯示按鈕,不會在繫結時自動生成,通常用來做未繫結列 |
DataGridViewComboBoxColumn | 使用者在單元格中顯示下拉選單,不會在繫結時自動生成,通常需要手動進行資料繫結 |
DataGridViewLinkColumn | 用於在單元格中顯示超連結,不會在繫結時自動生成,通常需要進行手動繫結資料 |
就是將已經存在的資料繫結到DataGridView控制元件上。將資料繫結到DataGridView控制元件上非常簡單和直觀,在大多數情況下,只需設定DataSource屬性即可。在繫結到包含多個列表或表的資料來源時,只需將DataMember屬性設定為指定要繫結的列表或表的字串即可。
DataGridView控制元件支援標準Windows表單資料繫結模型,因此該控制元件將繫結到下表所述的類的範例:
通常繫結到BindingSource元件,並將BindingSource元件繫結到其他資料來源或使用業務物件填充該元件。BindingSource元件為首選資料來源,因為該元件可以繫結到各種資料來源,並可以自動解決許多資料繫結問題。
DataGridView繫結資料來源的幾種方式:
第一種:
DataSet ds=new DataSet(); this.dataGridView1.DataSource=ds.Tables[0];
第二種:
DataTable dt=new DataTable(); this.dataGridView1.DataSource=dt;
第三種:
DataSet ds=new DataSet(); this.dataGridView1.DataSource=ds.Tables["表名"];
第四種:
DataSet ds=new DataSet(); this.dataGridView1.DataSource=ds; this.dataGridView1.DataMember="表名";//必須要設定DataMember屬性,指定要繫結到DataSet中的哪張表
第五種:
ArrayList al=new ArrayList(); this.dataGridView1.DataSource=al;
第六種:
Dictionary<string,string> dict=new Dictionary<string,string>(); this.dataGridView1.DataSource=dict;
第七種:可以排序
DataView dv=new DataView(); this.dataGridView1.DataSource=dv;
下面的程式中,演示上面的各種繫結方式
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Configuration; using System.Data.SqlClient; namespace DataGridViewDataBinding { public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); } /// <summary> /// 非繫結模式 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_NotBinding_Click(object sender, EventArgs e) { InitDgvByCustom(); } /// <summary> /// 通過自定義列的方式初始化DataGridView /// </summary> private void InitDgvByCustom() { //建立列 InitDgvTextBoxColumn(this.dgv_Demo, DataGridViewContentAlignment.MiddleCenter, "UserID", "使用者編號", 20, true, true); InitDgvTextBoxColumn(this.dgv_Demo, DataGridViewContentAlignment.MiddleCenter, "UserName", "使用者名稱", 20, false, true); InitDgvCheckBoxColumn(this.dgv_Demo, DataGridViewContentAlignment.MiddleCenter, "Sex", "性別", false, true); //建立行 DataGridViewRow drRow1 = new DataGridViewRow(); drRow1.CreateCells(this.dgv_Demo); //設定單元格的值 drRow1.Cells[0].Value = 1; drRow1.Cells[1].Value = "測試"; drRow1.Cells[2].Value = true; //將新建立的行新增到DataGridView中 this.dgv_Demo.Rows.Add(drRow1); //設定DataGridView的屬性 this.dgv_Demo.AllowUserToAddRows = false;//不自動產生最後的新行 } /// <summary> /// 建立DataGridView的TextBox列 /// </summary> /// <param name="dgv">要建立列的DataGridView</param> /// <param name="_alignmeng">設定列的對齊方式</param> /// <param name="_columnName">列名</param> /// <param name="_headerText">顯示的標題名</param> /// <param name="_maxInputLength">可輸入的最大長度</param> /// <param name="_readOnly">設定列是否唯讀 true唯讀 false 讀寫</param> /// <param name="_visible">設定列是否可見 true 可見 false 不可見</param> private void InitDgvTextBoxColumn(DataGridView dgv, DataGridViewContentAlignment _alignmeng, string _columnName, string _headerText, int _maxInputLength, bool _readOnly, bool _visible) { //範例化一個DataGridViewTextBoxColumn列 DataGridViewTextBoxColumn tbc = new DataGridViewTextBoxColumn(); //設定對齊方式 tbc.HeaderCell.Style.Alignment = _alignmeng; //設定列名 tbc.Name = _columnName; //設定標題 tbc.HeaderText = _headerText; //設定最大輸入長度 tbc.MaxInputLength = _maxInputLength; //設定是否唯讀 tbc.ReadOnly = _readOnly; //設定是否可見 tbc.Visible = _visible; //將建立的列新增到DataGridView中 dgv.Columns.Add(tbc); } /// <summary> /// 建立DataGridView的CheckBox列 /// </summary> /// <param name="dgv">要建立列的DataGridView</param> /// <param name="_alignmeng">設定列的對齊方式</param> /// <param name="_columnName">列名</param> /// <param name="_headerText">顯示的標題名</param> /// <param name="_readOnly">設定列是否唯讀 true唯讀 false 讀寫</param> /// <param name="_visible">設定列是否可見 true 可見 false 不可見</param> private void InitDgvCheckBoxColumn(DataGridView dgv, DataGridViewContentAlignment _alignmeng, string _columnName, string _headerText, bool _readOnly, bool _visible) { //範例化一個DataGridViewTextBoxColumn列 DataGridViewCheckBoxColumn cbc = new DataGridViewCheckBoxColumn(); //設定對齊方式 cbc.HeaderCell.Style.Alignment = _alignmeng; //設定列名 cbc.Name = _columnName; //設定標題 cbc.HeaderText = _headerText; //設定是否預設選中 //cbc.Selected = _selected.Equals("男") ? true : false; //設定是否唯讀 cbc.ReadOnly = _readOnly; //設定是否可見 cbc.Visible = _visible; //將建立的列新增到DataGridView中 dgv.Columns.Add(cbc); } /// <summary> /// 繫結模式 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_Binding_Click(object sender, EventArgs e) { InitDgvByBinding(); } /// <summary> /// 通過資料繫結的方式初始化DataGridView /// </summary> private void InitDgvByBinding() { #region 繫結單一資料來源 string strSQL = "select * from users"; //設定資料來源 DataTable dtSource = GetDataTable(strSQL); //直接繫結到表 //this.dgv_Demo.DataSource = dtSource; //繫結到DataView DataView dv=dtSource.DefaultView; //按照Password欄位降序排序 dv.Sort = " Password desc"; this.dgv_Demo.DataSource = dv; #endregion ////不自動產生最後的新行 this.dgv_Demo.AllowUserToAddRows = false; } /// <summary> /// 都市資料庫資料 /// </summary> /// <param name="strSQL"></param> /// <returns></returns> private DataTable GetDataTable(string strSQL) { DataTable dtDgv = new DataTable(); //dtDgv.TableName = ""; string strConn = ConfigurationManager.ConnectionStrings["DbConn"].ConnectionString; SqlConnection conn = new SqlConnection(strConn); SqlCommand cmd = new SqlCommand(strSQL, conn); SqlDataAdapter adapter = new SqlDataAdapter(cmd); try { conn.Open(); adapter.Fill(dtDgv); } catch (Exception ex) { } finally { conn.Close(); } return dtDgv; } private DataSet GetDataSet() { DataSet dsDgv = new DataSet(); //第一張表 string strFirstSQL = "select * from users"; DataTable dtFirst = GetDataTable(strFirstSQL); //設定表名 dtFirst.TableName = "UsersTable"; //將表新增到DataSet中 dsDgv.Tables.Add(dtFirst); //第二張表 string strSecondSQL = "select * from grade"; DataTable dtSecond = GetDataTable(strSecondSQL); //設定表名 dtSecond.TableName = "GradeTable"; //將表新增到DataSet中 dsDgv.Tables.Add(dtSecond); return dsDgv; } /// <summary> /// 繫結到第一張表 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_BindingFirst_Click(object sender, EventArgs e) { //清空DataGridView this.dgv_Demo.DataSource = null; //獲取資料集 DataSet dsDataSource = GetDataSet(); #region 方式一 this.dgv_Demo.DataSource = dsDataSource; //必須設定DataMember屬性,指定繫結到DataSet的哪張表 this.dgv_Demo.DataMember = "UsersTable"; #endregion #region 方式二 //this.dgv_Demo.DataSource = dsDataSource.Tables[0]; #endregion #region 方式三 //this.dgv_Demo.DataSource = dsDataSource.Tables["UsersTable"]; #endregion } /// <summary> /// 繫結到第二張表 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_BindingSecond_Click(object sender, EventArgs e) { //清空DataGridView this.dgv_Demo.DataSource = null; //獲取資料集 DataSet dsDataSource = GetDataSet(); #region 方式一 this.dgv_Demo.DataSource = dsDataSource; //必須設定DataMember屬性,指定繫結到DataSet的哪張表 this.dgv_Demo.DataMember = "GradeTable"; #endregion #region 方式二 //this.dgv_Demo.DataSource = dsDataSource.Tables[0]; #endregion #region 方式三 //this.dgv_Demo.DataSource = dsDataSource.Tables["GradeTable"]; #endregion } /// <summary> /// 繫結到字典 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_BindingDict_Click(object sender, EventArgs e) { Dictionary<int, string> dictDataSource = new Dictionary<int, string>(); dictDataSource.Add(1, "計算機系"); dictDataSource.Add(2, "外語系"); dictDataSource.Add(3, "數學系"); dictDataSource.Add(4, "中文系"); DataGridViewTextBoxColumn tbcKey = new DataGridViewTextBoxColumn(); tbcKey.HeaderText = "健"; //設定要繫結到的欄位 tbcKey.DataPropertyName = "Key"; this.dgv_Demo.Columns.Add(tbcKey); DataGridViewTextBoxColumn tbcValue = new DataGridViewTextBoxColumn(); tbcValue.HeaderText = "值"; //設定要繫結到的欄位 tbcValue.DataPropertyName = "Value"; this.dgv_Demo.Columns.Add(tbcValue); //設定資料來源方式一:字典轉換成陣列 //this.dgv_Demo.DataSource = dictDataSource.ToArray(); //設定資料來源方式二:字典轉換成集合 //this.dgv_Demo.DataSource = dictDataSource.ToList(); //設定資料來源方式三 //this.dgv_Demo.DataSource = (from p in dictDataSource // select new // { // Key = p.Key, // Value = p.Value // }).ToList(); //設定資料來源方式四 this.dgv_Demo.DataSource = (from p in dictDataSource select new { Key = p.Key, Value = p.Value }).ToArray(); } } }
到此這篇關於DataGridView控制元件資料繫結的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45