GridView的 RowCommand事件與 e.CommandArgument(因為分頁造成的Index錯誤)

摘要:GridView的 RowCommand事件與 e.CommandArgument





 

 

特別感謝讀者 鄭承翰的提醒,謝謝您。

上集有一個範例,第十章 Default_Book_3_Basic.aspx

 

原本是要講解:

1. 自己設定一個按鈕,可以做出「反選取」的效果(CommandName屬性的用法)

2. 在RowCommand事件內,如何得知使用者按下哪一列(前提:GridView有 Select按鈕)

    取得這一列的 「Index」數 與 「對應的主索引鍵」。

 

您也可以參考這篇文章,這位網友有兩種解法

http://pramaire.pixnet.net/blog/post/26364440-gridview%E5%85%A7rowcommand-event%E5%8F%96%E5%BE%97rowindex

或是參閱我另外一篇文章:

[GridView]在 RowCommand事件中,自訂的Button 如何取出某一列(RowIndex) 的索引值。NamingContainer的入門用法

http://www.dotblogs.com.tw/mis2000lab/archive/2011/09/08/gridview_selectedindex_dataitemindex_rowcommand_2011.aspx

 

 

執行成果如下圖:

      

 

 

但是.......有趣的來了

當我們點選下方「GridView  分頁的頁數」

RowCommand事件裡面的 e.CommandArgument也會把「頁數」呈現出來喔。

      

 

 

如果我們的 GridView「每一頁只有五列」

PageSize屬性 = 5

每一列的 Idnex應該是  0 ~ 4 (因為電腦從零算起)

 

這時候,您按下第五頁, e.CommandArgument為 5就會報錯了

錯誤訊息如下:

      

 

如果沒有仔細測試的話,還真的沒法測出這狀況呢?

 

 

 

如果您需要更多說明的話,

微軟msdn網站的說明很清楚,附贈的範例也很棒

http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.gridview.rowcommand.aspx

 

msdn提到這句話:

若要決定引發事件之資料列的索引 (Index),請使用傳遞至該事件的事件引數其 CommandArgument 屬性。 ButtonField  類別會自動用適當的索引值填入 CommandArgument 屬性。(我的註解:請對應本文的 第一張 圖片。)

對於其他命令按鈕,您必須手動設定命令按鈕的 CommandArgument 屬性。 例如,您可以在 GridView 控制項沒有啟用分頁時,將 CommandArgument 設定為 <%# Container.DataItemIndex %>。 

 

 

有沒有?  msdn特別強調「沒有」啟用分頁的情況下 ......

因為有分頁的時候,「頁數」會造成本文裡面 e.CommandArgument的錯誤

 

 

以下是msdn網站   CommandName補充說明:

CommandName 描述
"Cancel" 取消編輯作業,並將 GridView 控制項返回唯讀模式。 引發 RowCancelingEdit 事件。
"Delete" 刪除目前的資料錄。 引發 RowDeleting RowDeleted 事件。
"Edit" 將目前的資料錄置於編輯模式。 引發 RowEditing 事件。
"Page" 執行分頁作業。 將按鈕的 CommandArgument 屬性設為 "First"、"Last"、"Next"、"Prev" 或某個頁碼,以指定所要執行的分頁作業類型。 引發 PageIndexChanging PageIndexChanged 事件。
"Select" 選取目前的資料錄。 引發 SelectedIndexChanging SelectedIndexChanged 事件。
"Sort" GridView 控制項進行排序。 引發 Sorting Sorted 事件。
"Update" 更新資料來源中目前的資料錄。 引發 RowUpdating RowUpdated 事件。

雖然在按一下列於先前表格中的按鈕時會引發 RowCommand 事件,但建議您使用表格中為作業列示的事件。

 

 

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程教學,遠距教學 (Web Form 約 51hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程教學,遠距教學 (ASP.NET MVC 約 135hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.tw  或  school (at) mis2000lab.net

 (1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A 

 (2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I 

[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm  。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b  


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

.........   facebook社團   https://www.facebook.com/mis2000lab   ......................

.........  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)。

...................................................................................................................................................... 

ASP.NET MVC  => .NET Core MVC 線上教學  ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講   事先錄好的影片,並非上課側錄!   觀看時,有如「一對一」面對面講課