首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

解決 GridView 動態產生欄位回發後資料遺失與重複綁定問題

     編輯:關於C語言

問題情境

動態建立 GridView 編輯欄位時,點擊編輯可正常切換模式,但點擊 Update 或 Cancel 導致資料遺失。常見做法在 Page_Load 重新 Bind(),但會造成多餘綁定與資料衝突。

方案一:AJAX PageMethods(輕量回發)

將操作寫成 WebMethod (實際上是 Web Service),透過 PageMethods 呼叫,僅傳輸結果資料(XML/JSON),減少回發負載。適用於資料量小、操作單一情境,但對程式設計能力要求較高。

方案二:設定 __EVENTTARGET 與 __EVENTARGUMENT(通用做法)

透過 Trace 發現:
- Edit 時:__EVENTTARGET = GridView ID,__EVENTARGUMENT = "命令$行索引"
- Update/Cancel 時:兩變數皆無值

解法:在動態建立的按鈕 OnClientClick 注入腳本,手動設定這兩個隱藏欄位:

public string GetPostBackJS(string Command, int Index)
{
    return string.Format(
        @"$('#__EVENTTARGET').val('{0}');$('#__EVENTARGUMENT').val('{1}');",
        this.UniqueID, Command + "$" + Index.ToString());
}

// 建立按鈕時套用
editTc.Controls.Add(new ImageButton()
{
    CommandName = CommandEnum.Cancel.ToString(),
    ImageUrl = this.CancelImgUrl,
    AlternateText = "取消",
    OnClientClick = GetPostBackJS(CommandEnum.Cancel.ToString(), this.EditIndex)
});

此法相容性佳,可解決動態欄位回發事件失效問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved