程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> GridView動態創建列回發再綁定的解決

GridView動態創建列回發再綁定的解決

編輯:關於C#

先貼代碼:

protected void Page_Load(object sender, EventArgs e)
        {
            this.gvCon.MyBind+=new MyGridView.MyBind_Delegate(Bind); //這一句不用管 !,MyGridView  的需要!
            if (Page.IsPostBack == false)
            {
                Bind();
            }
        }

在 Bind 函數的動態綁定 編輯列。 當點 編輯時, 可以改變為 編輯樣式, 但是, 當點擊 Update 或 Cancel 時 , 數據丟失 !!這時, 我們采用的做法是 在 PageLoad 重新 Bind 一次!! 這就多Bind的了一次。 而且,在這一次Bind之後,會刷新頁面的值啊, 再 Update 時, 不是沒有效果了嗎!!還要在RowDataBound 函數裡加上

 if (e.Row.RowIndex == this.gvTypeList.EditIndex) return;

麻煩, 這個問題也一直困擾著我很長時間。直到最近,決心把它搞下去。

方法一:如果用 Ajax , 最高效的方式,就是在按鈕回發的時候,不要把整個控件放到 UpdatePanel 裡, 用 PageMethods 調用後台 WebMethod 所寫的方法(其實是 WebService),返回操作結果(要定義一些 XML 來約束 結果集)。這樣回發的負荷最少,適用於結果集數據量比較小和操作模式單一的情況。 但是對編程水平要求偏高。如果數據量大或操作模式復雜的話, 可回發,或讓 UpdatePanel 完成這個工作。

方法二:通過 Trace ,發現, Edit 的時候,__EVENTTARGET 變量為GridView控件ID, __EVENTARGUMENT 變量為 命令$行索引。 而Update和 Cancel 兩個變量是沒有值 的, 我試著利用這一點,給動態創建的回發按鈕綁定腳本事件設置兩個變量,測試可行。這個方案應該是普遍受用的。

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 ) });

OK。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved