今天gridview翻頁時,又遇到錯誤:索引超出範圍。必須為非負值並小於集合大小。
這是當時的pageindexchanging和rowcommand兩個事件的後台**
protectedvoid gridviewresult_onpageindexchanging(object
sender, gridviewpageeventargs e)
protected
void gridviewresult_onrowcommand(object
sender, gridviewcommandeventargs e)
else
if(e.commandname == "
resultdetail")
}
後經除錯發現了乙個一直被自己忽視的細節:點選gridview翻頁按鈕後,在引發pageindexchanging事件前,先引發了rowcommand事件。
因為當時gridview翻到第二頁後只有一行記錄,而向前翻頁(翻到第一頁)的「1」按鈕的e.commandargument=1
。
當這個1傳遞到rowcommand事件裡面後,gridviewresult.datakeys[1]
(第二行的主鍵)不存在,所以程式報錯。
知道問題原因後,只需把獲取index的語句移到if分支語句內部即可。
通過查閱msdn,發現不但pageindexchanging事件如此。
在單擊gridview控制項中的按鈕時,將引發rowcommand事件。
而且可以通過設定commandname屬性,呼叫gridview的某些內建功能。
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 事件,但仍建議您使用該表中列出的事件來執行該操作。參考
GridView翻頁時保持CheckBox選擇狀態
是否翻頁 private bool changed false 定義儲存選擇項主鍵集合屬性 protected listselecteditems set 獲取選擇項主鍵 private void getselecteditem else 獲取選擇的記錄 for int i 0 i this.gve...
GridView刪除資料時索引超出範圍的解決方法
今天用gridview運算元據時,總是提示 上網查了下解決方法,發現網上下面的答到了重點 try 首先設定乙個gridview 乙個主鍵 對應於你資料庫表的主鍵 gridview1.datasource myds gridview1.datakeynames new string 主鍵 gridvi...
索引超出限制 MySQL
create table mytable id bigint primary key not null auto increment,column1 varchar 255 column2 varchar 255 engine innodb charset utf8 並執行如下的建立復合索引的語句 ...