如果用gridview的內建的commandField的話,他們的bind都預設有找到index在哪 可是如果使用rowCommand的話 就必須自己建立

RowCommand這個事件主要是用來在gridview上面有資料列有一些動作的時候做的bind

讓一些動作可以知道透過哪些commandName名稱(自己定義) 然後可以知道目前列在哪筆資料上

接下來寫法就和 commandField相同

(純屬個人學習心得和強者詢問來的一些想法 如有錯誤請不要太在意啦! 我也是初學者囉)

htmlCode上gridview必須要有 onRowCommand的事件 (否則就要加寫上handles ....在server code的事件後面,此方法比較常出現在code-behind寫法中)

    如果兩個都寫了就可能會發生index錯亂造成異動兩筆資料

    <gridview.... onRowCommand="gridview1_RowCommand">....

RowCommand事件(server code)

前面要做一些定義讓這個事件啟動時知道目前所在位置是gridview的哪一行的哪個動作當中

並且透過這個方式可以找到 在那列上面的其他物件(最常用的就是label)的值

==> 也就是下列範例的前兩行

寫法如下:(感謝強者的醍醐灌頂)

        Dim gvTmp As GridView = CType(sender, GridView)
        Dim gvRow As GridViewRow = CType(CType(e.CommandSource, Button).NamingContainer, GridViewRow)

        If gvRow.RowType = DataControlRowType.DataRow Then
            Dim rowIndex As Int16 = gvRow.RowIndex
            ' 下面這幾行開始就很熟悉了~~
            Dim OOO As Label = CType(gvTmp.Rows(rowIndex).FindControl("OOO"), Label)
            Dim XXX As Label = CType(gvTmp.Rows(rowIndex).FindControl("XXX"), Label)

            If e.CommandName = "Eat" Then

                  ' your business logic....

             End If

        End If

  所以當要使用rowCommand的時候就自己想辦法去找出rowIndex接下來就一樣囉!

另外,還有另外的寫法是透過 commandArgument="(串參數)"但是這樣比較不好的一點就是如果需要的值是複合的可能要串在一起...這樣對於未來那些參數如果字元數擴增的話....就玩很大啦! (這種寫法感覺很像ASP Orz...)

 

ps. 後記: 會想寫下來是因為最近有遇到類似的東西,覺得很值得寫下來給自己看看... 另外如果想要寫打內的話~gridview是個很重要的靈魂人物,不然回到以前的畫Table時代 當USER要新增一個欄位...雖說不難可是很煩人....(M$真的很會賣東西耶...)

也因為gridview是個靈魂人物,所以以後有機會再把一些堪用的心得放上來供自己參考~

(只是不知道可以用多久就是了 >"<)

創作者介紹

superjung的奇幻之旅

superjung 發表在 痞客邦 PIXNET 留言(0) 人氣()