操作DataGridView有兩種方式,一種是使用控件綁定的方式,操作的時候只要更改DataSet控件的數據集就能夠實現DataGridView數據的靈活顯示;另一種方式是全部使用代碼來手工操作DataGridView控件的顯示,盡量少用控件,使代碼看起來更連貫,操作更靈活。
?? 控件方法來操作DataGridView控件:
?
?(控件方法略,比較簡單,拖控件,綁定即可)
?? 代碼方法來操作DataGridView控件
???? 通過上兩節,老程序員對數據的簡單操作已經很熟練了。現在在第一個實例“hello word!”的基礎上,繼續DataGridView控件的手工操作實習。
添加一個控件,文本命名如圖:
? ?
?? 我們在上面看到的數據顯示時這樣的:
? ?
??? 列的頭部是數據庫表的列段名,因為我們是將SQL查詢的數據集直接綁定到DataGridView控件的。
下來我們來改變它的頭部,同時,來指定DataGridView控件各個列綁定的數據成員。
??????? private void button4_Click(object sender, EventArgs e)
??????? {
??????????? //定義數據庫連接字符?????????
??????????? string str_con = @"Data Source=26-3B72903E783B/SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=testDB;";
?
??????????? //定義SQL語句字符串
??????????? string sql = "select * from danwei";
??????????? // string sql = string.Format("insert into danwei (danwei) values ('{0}')", textBox1.Text);
? ??????????//定義并實例化數據庫連接類型變量
??????????? SqlConnection conn = new SqlConnection(str_con);
?
??????????? //打開數據庫連接
??????????? conn.Open();
?
?
??????????? SqlCommand comm = new SqlCommand(sql, conn);
??????????? SqlDataAdapter da = new SqlDataAdapter(comm);
?
??????????? DataSet ds = new DataSet();
??????????? da.Fill(ds, "danwei");
?
??????????? dataGridView1.DataSource = ds;
??????????? dataGridView1.DataMember = "danwei";
?????????? //---------------以上代碼可以直接拷貝button3的代碼--------------------
?
???????????? //設置dataGridView1控件第一列的列頭文字
??????????? dataGridView1.Columns[0].HeaderText = "序號";
//設置dataGridView1控件第一列的列寬
??????????? dataGridView1.Columns[0].Width = 80;
?
?
//設置dataGridView1控件第二列的列頭文字
??????????? dataGridView1.Columns[1].HeaderText = "單位";
??????????? //設置dataGridView1控件第二列綁定的數據集中第一個數據表的第二列的數據
??????????? //前面說了,ds數據集是一個多表的集合
??????????? dataGridView1.Columns[1].DataPropertyName = ds.Tables[0].Columns[1].ToString();
//設置dataGridView1控件第二列的列寬
??????????? dataGridView1.Columns[1].Width = 300;
?
??????????? conn.Close();
??????? }
???? 運行后,按下DataGridViewOpar按鈕顯示如下:
?
比較原來的;
??? 發現就是列頭變了,以及下面的滾動條長了,其實數據綁定了。可以將綁定值在代碼中互換一下,再看看;
??? 上面代碼改為:
private void button4_Click(object sender, EventArgs e)
??????? {
????????? ….//省略前面已有的代碼
??????????? dataGridView1.Columns[0].HeaderText = "序號";
??????????? dataGridView1.Columns[0].DataPropertyName = ds.Tables[0].Columns[1].ToString();
??????????? dataGridView1.Columns[0].Width = 80;
?
??????????? dataGridView1.Columns[1].HeaderText = "單位";
??????????? dataGridView1.Columns[1].DataPropertyName = ds.Tables[0].Columns[0].ToString();
??????????? dataGridView1.Columns[1].Width = 300;
}
?
運行后:
?
?
??? 單位和序號的值就換位置了。
???
??? 自動添加序號:
???? 動態添加數據的時候,有時候讀取數據庫的數據ID號不是順序的,這時就需要自己添加自動遞增的序號。
如圖:
??? 這里的序號不是序列的,中間跳了個2,做為統計到底有幾個單位不直觀。我們添加一段代碼:
private void button4_Click(object sender, EventArgs e)
??????? {
????????? ….//省略前面已有的代碼
dataGridView1.Columns[0].HeaderText = "序號";
??????????? //dataGridView1.Columns[0].DataPropertyName = ds.Tables[0].Columns[1].ToString();
??????????? dataGridView1.Columns[0].Width = 80;
?
??????????? dataGridView1.Columns[1].HeaderText = "單位";
??????????? //dataGridView1.Columns[1].DataPropertyName = ds.Tables[0].Columns[0].ToString();
?????????? // dataGridView1.Columns[1].Width = 300;
?
//自動整理序列號
??????????? int coun = dataGridView1.RowCount;
??????????? for (int i = 0; i < coun - 1; i++)
??????????? {
??????????????? dataGridView1.Rows[i].Cells[0].Value = i + 1;
?????????????? ?dataGridView1.Rows[i].Cells["danweiid"].Value = i + 1;
??????????????
??????????? }
//因為第一個列值被修改了,所以后面的列值索引就從0開始
//所以單位的值應該對應的是第0列
dataGridView1.Columns[0].DataPropertyName = ds.Tables[0].Columns[0].ToString();
}
運行后,顯示:
?
?
?
綜上,老程序員已經可以知道:
1,? DataGridView控件如何用代碼綁定數據集;
2,? DataGridView控件如何如果將指定的列綁定到數據集里的指定數據列;
3,? DataGridView控件如何動態編輯它的列值;
其實通過上面的實習,老程序員已經算很靈活的操作DataGridView了,不過為了在項目中更加順手,老程序員通過查找資料和測試,整理了DataGridView控件的用法詳解合集。附錄如下:
(以下代碼在如下情況下配置:添加一個ListBox控件,在里面顯示獲取到的值。添加一個button3按鈕控件,以下功能代碼均在該按鈕控件的Click事件下觸發:)