日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinForm编程数据视图之DataGridView浅析(续)

發(fā)布時(shí)間:2025/7/14 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinForm编程数据视图之DataGridView浅析(续) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  關(guān)于昨天的DataGridView我覺得有必要補(bǔ)充一下。

  首先,我們發(fā)現(xiàn)DataGridView上的項(xiàng)(即行DataGridViewRow)有一個(gè)DataBoundItem屬性(參見http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridviewrow.databounditem(VS.80).aspx),可以幫助我們拿到綁定到當(dāng)前行的對(duì)象(記住,只讀的)。

  當(dāng)然,拿到的是一個(gè)object類型,您將其轉(zhuǎn)化為需要的類型(即其本來的類型)?就可以拿到該對(duì)象的數(shù)據(jù)進(jìn)行操作了。

  比如上一次我們說到:將保存有若干員工信息的集合直接或使用泛型類BindingList綁定到DataGridView上,我們可以在運(yùn)行時(shí)通過DataGridView上DataGridViewRow的DataBoundItem屬性拿到該行對(duì)應(yīng)的對(duì)象。

  比如下面代碼:

1 // 定義數(shù)據(jù)源
2 // List<?> list = new List<?>();
3
4 // 綁定數(shù)據(jù)源
5 // dataGridView1.DataSource = new BindingList<?>(list);
6
7 // 在運(yùn)行時(shí)拿到
8 // ? obj_name = dataGridView1.Rows[i].DataBoundItem as ?;

  道理很簡(jiǎn)單,數(shù)據(jù)源的綁定過程中會(huì)執(zhí)行將對(duì)象的屬性值分配到列顯示,并將項(xiàng)的DataBoundItem屬性引用到該對(duì)象。

  那么可能會(huì)有舉一反三的朋友會(huì)想:如果我把數(shù)據(jù)庫表或者數(shù)據(jù)視圖作為數(shù)據(jù)源綁定呢?

  大家應(yīng)該相信:解決的辦法肯定是有的,首先,不管綁定的數(shù)據(jù)類型是什么,具體到每一行上,肯定是一個(gè)對(duì)象,通過該對(duì)象的屬性和方法。我們就能求解問題。

  首先,我們通過實(shí)驗(yàn)獲得當(dāng)綁定DataView作為數(shù)據(jù)源時(shí)每一行綁定到的對(duì)象類型。

  我們可以編寫如下代碼:

1        // 在一個(gè)初始化的事件或方法中完成
2
3        // 取得數(shù)據(jù)
4 SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=db_MySchool;User ID=sa;Password=12345");
5 SqlDataAdapter adapter = new SqlDataAdapter("select * from tb_Student", con);
6 DataSet ds = new DataSet();
7 adapter.Fill(ds);
8
9 // 綁定數(shù)據(jù)
10 dataGridView1.DataSource = ds.Tables[0].DefaultView;

  在另一個(gè)事件或方法(界面呈現(xiàn)時(shí)的)中使用消息框或者通過斷點(diǎn)調(diào)試中查看具體類型,結(jié)果我們得到此時(shí)DataGridView的每一行綁定的對(duì)象類型為System.Data.DataViewRow,從字面上理解就是數(shù)據(jù)列的視圖。

  于是,事情變得簡(jiǎn)單了。我們還是利用DataBoundItem屬性將對(duì)象拿到,只不過將對(duì)象類型改為它真正的類型就可以了嘛。

  具體實(shí)現(xiàn)如下:

1      // 窗體加載
2 private void Form1_Load(object sender, EventArgs e)
3 {
4 // 取得數(shù)據(jù)
5 SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=db_MySchool;User ID=sa;Password=12345");
6 SqlDataAdapter adapter = new SqlDataAdapter("select * from tb_Student", con);
7 DataSet ds = new DataSet();
8 adapter.Fill(ds);
9
10 // 綁定數(shù)據(jù)
11 dataGridView1.DataSource = ds.Tables[0].DefaultView;
12 }
13
14 // DataGridView.RowsAdded事件
15 private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
16 {
17 for (int i = e.RowIndex; i < e.RowIndex + e.RowCount; i++)
18 {
19 // 拿到對(duì)象
20 DataRowView drv = dataGridView1.Rows[i].DataBoundItem as DataRowView;
21 }
22 }

  拿到對(duì)象了,實(shí)際上如果我們沒有使用過也沒什么大不了,文檔可以查,引擎可以搜,大不了我一個(gè)個(gè)屬性和方法試……

  當(dāng)然,我在這里就直接將如何使用以上取得對(duì)象的方法做簡(jiǎn)單的描述:

1          // 拿到對(duì)象
2          // 如果您是將DataTable作為數(shù)據(jù)源而非DataView,拿到的對(duì)象類型就是應(yīng)為DataRow
3 DataRowView drv = dataGridView1.Rows[i].DataBoundItem as DataRowView;
4
5 // 首先通過列的視圖拿到列
6          // 如果您是將DataTable作為數(shù)據(jù)源而非DataView,您可以省略此步驟
7 DataRow row = drv.Row;
8
9 // 然后通過列的Field方法拿到具體的需要的字段(相對(duì)于數(shù)據(jù)庫表結(jié)構(gòu))或者說列的具體內(nèi)容
10          // 該方法重載很多中,且支持泛型,十分強(qiáng)大
11          // 比如,我們使用通過字段名(或列名)返回代表該列內(nèi)容的字符串的重載版本
12 string stuName = row.Field<string>("StudentName");

  更多內(nèi)容參見http://msdn.microsoft.com/zh-cn/library/system.data.datarow.field(VS.90).aspx(DataRow.Field 方法)。

轉(zhuǎn)載于:https://www.cnblogs.com/Johness/archive/2012/03/31/2427658.html

總結(jié)

以上是生活随笔為你收集整理的WinForm编程数据视图之DataGridView浅析(续)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。