GridView动态创建列回发再绑定的解决

先贴代码:

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。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索变量
, 按钮
, this
, tostring
, bind
cancel
gridview动态绑定数据、gridview动态绑定列、gridview 动态绑定、动态创建gridview、gridview绑定数据,以便于您获取更多的相关知识。

时间: 2024-08-07 20:04:17

GridView动态创建列回发再绑定的解决的相关文章

gridview动态生成列,动态添加控件问题

问题描述 在GRIDVEIW的行绑定ROWDATABOUND里生成了N个列,并且往行里的某些单元格里加了DROPDOWNLIST,显示都没问题,但是我一点页面的按钮,本想通过循环GRIDVIEW,找到每一行里的DROPDWNLIST,可是结果是不能找到.而且动态生成的列也没有了.我又把代码放在ROWCREADER事件里创建列,及为列的单元格里增加DROPDOWNLIST,在执行调试时发现原先在页面上的列里放的HIDDEN控件也找不到,后来通过e.Row.DataItem可以取到我我存在HIDDE

GridView动态添加列的方法及代码

代码如下: protected void Page_Load(object sender, EventArgs e) { TemplateField mycustomField = new TemplateField(); //创建列实例 mycustomField.ShowHeader = true; // 设置属性 LinkButton lb = new LinkButton(); lb.Text = "Delete"; mycustomField.HeaderTemplate =

C#实现DataGrid(GridView)动态生成列

有时候需要在DataGrid(GridView)里显示的数据列数是不固定的,而且还需要对数列列进行控制,如显示或隐藏,这时我们就不能用DataGrid里的自动生成列,更不能对列做数据绑定了,但我们有个办法,就是动态地生成数据列,DataGrid的动态列其实就是以类的形式存在,功能很强大. 要实现动态列,首先要添加一个类文件,这个类必须要继承ITemplate接口,主要是要实现一个方法:InstantiateIn,在InstantiateIn里做的是对该动态列做事件控制的绑定,如OnDataBin

一个分页跟动态创建列的控件

创建|动态|分页|控件 using System;using System.Web;using System.IO;using System.Drawing;using System.Data;using System.Data.SqlClient;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.ComponentModel; namespace Y

jQuery 绑定事件到动态创建的元素上的方法实例_jquery

在进入主题之前,我们先来看一个前台页面经常用到的功能:点击页面输入框时自动选择其中文本. 很容易想到利用输入框的focus事件,当输入框获得焦点时,再调用jQuery的select()方法. Okay,想法很简单,逻辑似乎也无错.具体我们来看一下现实到底能不能实现. 1.页面构造个表单,放上几个输入框.代码看起来是这样子的. 复制代码 代码如下: <form action="/" method="post">        <table>  

GridView动态生成TextBox模板列后如何取值的问题

问题描述 各位好,这个问题以前有人提过了,但是我研究了好几天用到我的程序里就总出现问题,希望高手能够帮帮忙,谢谢!我需要用GridView动态生成列数不固定的模板列,然后在里面添加textbox控件后,由用户输入数值,然后将这些值获取出来.但是我运行到这里就总是出现错误说"既不是表的DataColumn也不是表的DataRelation".代码如下:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Co

jQuery 绑定事件到动态创建的元素上

  在进入主题之前,我们先来看一个前台页面经常用到的功能:点击页面输入框时自动选择其中文本. 很容易想到利用输入框的focus事件,当输入框获得焦点时,再调用jQuery的select()方法. Okay,想法很简单,逻辑似乎也无错.具体我们来看一下现实到底能不能实现. 1.页面构造个表单,放上几个输入框.代码看起来是这样子的. <form action="/" method="post"> <table> <tr> <td

取消异步回发

通过使用页上的NET UpdatePanel Web 服务器控件,可以在 ASP.NET 中实现异步回发. UpdatePanel 控件不再需要在每次回发时刷新整个页面,这样将改善用户体验.在浏览器中, Microsoft AJAX Library 中的Sys.WebForms.PageRequestManager 类在客户端页生命周期中管 理事件以进行异步回发.可以通过处理 PageRequestManager 类公开的事件来自定义异步回发 出现的方式. 先决条件 若要在您自己的开发环境中实现

动态创建控件支持事件响应并可保存与读取

VC++6.0中创建动态控件是比较偏离基础的知识,也有一定的难度.它的完整功能是要动态创建控件后再动态响应控件中的事件,两者全部做到才算完整. 这里我将展示一个完整的动态控件示例,它可以动态创建控件,然后再动态响应控件事件,并可以保存控件信息至ini配置文件,然后再根据ini文件读取出控件信息来动态创建控件.相信它能够解决你在动态控件中所遇到的许多问题. 当然,动态控件的方法有许多种,我展示的只是给我认为较好的. 这里以VC++6.0创建对话框工程为例,添加菜单,分别添加子项按钮,文本框,标签.