2010年11月2日 星期二

asp.net_DataView怎麼取值?(使用index或欄位名稱)

DataView是在撰寫asp.net與資料庫連結時很常使用的資料型態,原因不外乎有許多現成的元件都可以直接繫結,而我們在使用時大概分成四個步驟:1.組SQL語法、2.利用某種DataSource(或許可以說就是SqlDataSource,不管是拉到頁面上還是寫在程式內)、3.將取回的資料放進DataView、4.資料繫結。

而當我們需要把DataView的資料取出來做一些簡單的計算,或是放到特定的地方時,通常會使用
dv.Table.Rows(0).Item(0).ToString()
來取出行列index都是0的資料,如果我們只是為了列出資料,可以利用迴圈很快的列出所有資料,但是當要把每一個欄位值都放到特定位置時(比如編輯介面抓取舊有資料到textbox上),這樣就變得有點麻煩,因為這個index變得要跟SQL內的順序去比對,你也不會一值記得第29欄是誰?

所以或許我們會做點簡單的注解,讓之後程式碼比較好閱讀。

dv.Table.Rows(0).Item(0).ToString() '案件編號

想像一個情況,撈出一筆資料,他擁有50個欄位,都依照上面方式獲得值,而且擺放好了;這時候突然發現需要多增加兩個欄位,而又因為這兩欄與現有某個欄位相關,你希望插到資料庫的第15、16欄,那麼程式碼是該將這兩欄也一併放在序列15、16,還是乾脆放在51、52序列勒?

通常這種狀況,我都會希望自己的程式碼跟資料庫有對應,所以就會重新調整序列(呆~~~)

說了一堆,終於要進入本篇的重點,上面這個情況有沒有更好的辦法?
DataView在取資料時,除了可以利用index的方式抓取,也可以直接輸入欄位名稱,就像是:

dv.Table.Rows(i).Item("PrjID").ToString() '案件編號

而在C#裡面有些許不同:

dv.Table.Rows[i]["PrjID"].ToString()

所以結論相當簡單,當你需要跑迴圈,當然要用index,如果沒有迴圈的需求,為了未來修改時降低困擾增加可讀性,可以直接寫欄位名稱。

3 則留言:

匿名 提到...

請問C#的[iCPG]是什麼東西啊???

ola的家 提到...

iCPG是我的一個整數變數,我修改了一下文章,改成了i。

所以,也就是哪一列的意思,dv.Table.Rows[i]["PrjID"].ToString(),i代表第幾列,PrjID則是欄位名稱。

匿名 提到...

看懂了~謝謝囉!

張貼留言