[C#][gridview][RowDataBound] 處理紀錄

摘要:[C#][gridview][RowDataBound] 處理紀錄

最近都在 做一堆有關於girdview 的畫面處理動作

這次把有用到的功能都記錄下來

RowDataBound  事件其實就是在生成 gridview 的時候 所做的事情

而這個事情理還包函了

 

DataControlRowType.Header

跑取表頭的時候

DataControlRowType.DataRow

在跑取資料列的時候

DataControlRowType.Footer:

在跑取表尾的時候

DataControlRowType.Pager

忘了待哺

DataControlRowType.Separator:

忘了帶補

DataControlRowType.EmptyDataRow:

空資料列的時候

 

最常用到的就是讀取資料列的時候了

有些需求會希望把資料在同一個儲存格顯示時 就必續在這個狀態下塞資料

可以在 RowDataBound 事件時 使用

if (e.Row.RowType == DataControlRowType.DataRow)

去代資料或者

//若需要修改到表頭表尾甚至是分頁的時候 可以用這種方法 去抓取目前的type 在寫方法去做       

 switch (e.Row.RowType)
        {

            case DataControlRowType.DataRow:
                doSomeFun1();
                break;

          case DataControlRowType.Footer:
                doSomeFun2();
                break;
           ..........
        }

那要怎樣把值從這邊帶到畫面上呢!???

首先可以先在gridview 的欄位上面 轉換成樣板 並放入

literal 原件 或者也可以根據你的喜好來排版

接下來就是在 DataRow 的時候 使用FindControl 來找尋girdview 上的這個元件

並把值塞進去 ,這邊可以做一些訊息上的修改

您可以一個一個塞到這元件中 這樣單一儲存格顯示的資料就不會是在像自動產生的資料

會有多種欄位的資料看使用者怎樣去排版跟使用

也可以依據元件來放看個人使用方法

若有一些特別欄位要做運算的時候

也可以在這邊做(個人覺得能在SQL做更好)...但小弟SQL 沒那嗎強...部分的資料可能會在這邊運算

方法像這樣

//判斷方式可以自行再加強

if(DataBinder.Eval(e.Row.DataItem, "CreateDate").ToString().Trim() != "" ){

   objLtl = e.Row.FindControl("ltlCreateDate")

   objLtl.Text = Convert.ToDateTime(DataBinder.Eval(e.Row.DataItem, "CreateDate")).ToString("yyyy/MM/dd")

}

就可以將日期塞到 設計頁上的ltlCreateDate 的欄位上了

 

新手發文...若有錯誤請多包涵與指正

謝謝