小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

DataGridView控件用法(一)綁定數(shù)據(jù)

 網(wǎng)絡(luò)摘記 2014-03-31

  一、 DataGridView控件的用法(如何綁定、修改其中某一列值、添加序號列、交換任意2列顯示順序)


1. DataGridView綁定數(shù)據(jù)源。

 在頁面上拖放一個DataGridView控件

//連接數(shù)據(jù)庫讀取數(shù)據(jù),為DataGridView賦值。

String strConn = "server= .\XWPC_DATABASE;uid=數(shù)據(jù)庫用戶名;pwd=數(shù)據(jù)庫密碼;database=數(shù)據(jù)庫名";

SqlConnection conn = new SqlConnection(strConn);
String sqlId = "select * from [USER] ";
conn.Open();
SqlCommand cmd = new SqlCommand(sqlId, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);

DataSet ds = new DataSet();
da.Fill(ds, "USER");

DataGridView.DataSource = ds;
DataGridView.DataMember = "USER";

conn.Close();

上述代碼執(zhí)行后頁面上數(shù)據(jù)顯示是這樣的:


2. 修改 DataGridView中數(shù)據(jù)的表頭(本來默認是數(shù)據(jù)庫中的字段名)。
//改變DataGridView的表頭
DataGridView.Columns[1].HeaderText = "用戶名";

//設(shè)置該列寬度
DataGridView.Columns[1].Width = 70;
3. 將DataGridView最前面一列編號改為從1開始依次增加的序號(默認的字段編號對用戶沒意義,而且不連續(xù))。

//在表前面加一列表示序號
DataGridView.Columns[0].HeaderText = "編號";
DataGridView.Columns[0].Width = 60;
//自動整理序列號
int coun = DataGridView.RowCount;
for (int i = 0; i < coun - 1; i++){
   DataGridView.Rows[i].Cells[0].Value = i + 1;
   DataGridView.Rows[i].Cells["USER_ID"].Value = i + 1;
}         

//改變DataGridView的表頭
DataGridView.Columns[1].HeaderText = "用戶名";
//設(shè)置該列寬度
DataGridView.Columns[1].Width = 70;

DataGridView.Columns[2].HeaderText = "密碼";
DataGridView.Columns[2].Width = 70;

//默認按順序每列DataGridView依次從ds中對應(yīng)賦值
DataGridView.Columns[0].DataPropertyName = ds.Tables[0].Columns[0].ToString();

執(zhí)行后效果如下:


4. 對調(diào) DataGridView中某兩列的順序,代碼如下:

 //改變DataGridView的表頭
DataGridView.Columns[1].HeaderText = "密碼";

//設(shè)置該列寬度
DataGridView.Columns[1].Width = 70;
DataGridView.Columns[1].DataPropertyName = ds.Tables[0].Columns[2].ToString();

DataGridView
.Columns[2].HeaderText = "用戶名";
DataGridView.Columns[2].Width = 70;
DataGridView.Columns[2].DataPropertyName = ds.Tables[0].Columns[1].ToString();   

執(zhí)行效果:

5. 設(shè)置DataGridView使某列不顯示、使其不可直接編輯、使其不顯示最后一行空白。

  //不顯示出dataGridView的最后一行空白
  DataGridView.AllowUserToAddRows = false;

  //不允許在列表上直接編輯
  DataGridView.ReadOnly = true;

  //數(shù)據(jù)庫表中第十列數(shù)據(jù)不顯示在表格中
  DataGridView.Columns[9].Visible = false;
6. 將從 下拉列表ComboBox中選擇存入數(shù)據(jù)庫中的數(shù)據(jù)1,2…轉(zhuǎn)換為對應(yīng)字符串顯示給用戶(比如用戶角色在數(shù)據(jù)庫中1為管理員,2為會員,3為最終用 戶,那么DataGridView列表中應(yīng)該顯示管理員/會員/最終用戶而不是顯示1/2/3這樣的數(shù)字)。CheckBox也是同理(比如性別1為 男,0為女,我們需要顯示男/女而不是1/0)。

這個問題可以在數(shù)據(jù)從DataSet綁定到DataGridView之前對DataSet中數(shù)據(jù)進行遍歷一次,將該字段修改后再存入DataSet,然后再綁定到DataGridView,此法耗時,數(shù)據(jù)記錄多的情況延遲非常明顯。所以一般采用CellFormatting事件來完成該任務(wù),因為DataGridView.CellFormatting事件在每繪制一個單元格時,就會發(fā)生一次,這樣就可以在顯示列表時修改這個單元格的顯示內(nèi)容。當(dāng)然,也正因為每繪制一個單元格都觸發(fā)CellFormatting事件, 所以處理此事件時應(yīng)避免時間過長。另外,在檢索單元格FormattedValue或調(diào)用其GetFormattedValue方法時,此事件也會發(fā)生。 網(wǎng)上也有少數(shù)人說該事件不建議使用,因為這個事件稍不注意就經(jīng)常被觸發(fā)而更新表格,比如排序時候也被觸發(fā),目前我沒發(fā)現(xiàn)這個問題,也可能是我數(shù)據(jù)比較少 吧。實際上該事件被普遍用于幫助用戶實現(xiàn)自定義單元格樣式,比如改變背景顏色、高亮顯示某行等。廢話不說了,用CellFormatting事件實現(xiàn)修改DataGridView中某列的值代碼如下:(在設(shè)計器中DataGridView的屬性欄–切換到事件欄–找到CellFormatting事件,雙擊進入該事件函數(shù)體寫如下 代碼 。 )

方法一:

1 private void  DataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
2     if (e == null || e.Value == null || !(sender is DataGridView))
3         return;

5     DataGridView view = (DataGridView)sender;           

7     try {
8         if (view.Columns[e.ColumnIndex].DataPropertyName == "USER_ROLEID") {
9             int val = Convert.ToInt32(e.Value);
10             switch (val) {
11                 case 1:
12                     e.Value = "管理員";
13                     break;
14                 case 2:
15                     e.Value = "會員";
16                     break;
17                 case 3:
18                     e.Value = "最終客戶";
19                     break;
20                 default:
21                     break;
22             }
23             e.FormattingApplied = true;
24         }
25     }
26     catch (System.Exception ex) {
27         e.FormattingApplied = false;
28         MessageBox.Show(ex.ToString());
29     }
30 }

方法二:

1 private void  DataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
2     try {
3         //&ldquo;USER_ROLEID&rdquo;這列在數(shù)據(jù)庫中對應(yīng)第5列,角標是4
4         if (e.ColumnIndex == 4) {
5             int val = Convert.ToInt32(e.Value);
6             switch (val) {
7                 case 1:
8                     e.Value = "管理員";
9                     break;
10                 case 3:
11                     e.Value = "會員";
12                     break;
13                 case 5:
14                     e.Value = "最終客戶";
15                     break;
16                 default:
17                     break;
18             }
19             e.FormattingApplied = true;
20         }
21     }
22     catch (System.Exception ex)  {
23         e.FormattingApplied = false;
24         MessageBox.Show(ex.ToString());
25     }
26 }

以上兩種方法都測試通過,結(jié)果一樣,執(zhí)行后效果如下:



    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多