搜尋此網誌

2022年10月21日 星期五

ASP GridView 與 DataTable

緣起:


    我剛學習 ASP 時,卡關卡最久的就 GridView 了,對於 View 這個詞,我能想到的就 Android 裡面的 View,會下意識的以為它是一個畫面 (其實它想指的應該是一個控制項才對),然後加上那個 Grid,我會把整個 GridView 解讀成,它是用來把畫面給分割成網格的東西,但這東西其實只是 HTML 裡的 Table (我差不多 2 個多禮拜後才理解這件事)。

    網頁很常搭配資料庫來顯示資料,所以 GridView 在專案中的裡用超頻繁的,我們公司的程式還有為 GridView 增加一些功能,把它改成適合專案使用的 Customer Control,導致我更難去理解它在寫些什麼了,那些 databind 還 field 什麼的,還要搭配 objectdatasource 使用,搞得我好煩,都不懂它在幹啥,網路上的教學資源都是要搭配資料庫來用,整個學起來很麻煩,我很常做不到 1/4 就放棄了。

    我今天總算是了解 GridView 的用法了,我搭配 DataTable 成功生成了表格,紀錄一下這個程式。


GridView:


    它的架構大概就這樣, Columns 設定表格的欄,我們把它給加到 index.aspx 的 form 標籤中
    

    在 Columns 裡輸入 < 後,它就會跳出那些可以加在裡面的控制器選項


    ButtonField、CheckBoxField、HyperLinkField、ImageField 看名字就知道,那些欄位裡面放的會是啥,其它的就比較不好猜了,不過我這裡會用到的只有 BoundField 就是了,這邊有所有 field 的介紹。

    接下來,我加了兩個 BoundField 進去,它有兩個最重要的屬性要設定,DataField 是當我們指定了表格的資料來源後 (那個來源通常是 DataTable,吧),Table 的 column 會自動跟 DataTable 裡同名稱的 column 做對應,再來是 HeaderText,就是 Table 那一欄最上面會顯示的字


    再來可以開始寫後端程式了


DataTable:


    GridView 要顯示資料的話,要指定 DataSource,再來呼叫 DataBind 方法,資料才能顯示,這部份的程式我們寫在 Page_Load 裡


    我們再來寫個 GenerateData,讓它回傳 DataTable。使用 DataTable 前要引入 System.Data (using System.Data)


    new 一個 DataTable 的物件,然後用 Columns.Add 來設定它的欄位,name 欄位放 string,age 欄位放 int,再來用 Rows.Add 加入每一列的資料,資料是對應欄位在放的。

DataTable 會長這樣

    然後執行程式,看一下結果


    嗯...,表格是出來了,啊怎麼又多了兩列 ? 我後來去查,發現要把 GridView 的 
AutoGenerateColumns 設成 false 才行


    設完後,表格就正常了



沒有留言:

張貼留言