GridView 动态创建列回发再绑定的解决!
先贴代码:
在 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 两个变量是没有值 的, 我试着利用这一点,给动态创建的回发按钮绑定脚本事件设置两个变量,测试可行。这个方案应该是普遍受用的。
在创建按钮的地方设置属性:
OK。
protected void Page_Load(object sender, EventArgs e)
{
this.gvCon.MyBind+=new MyGridView.MyBind_Delegate(Bind); //这一句不用管 !,MyGridView 的需要!
if (Page.IsPostBack == false)
{
Bind();
}
}
{
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());
}
{
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。
作者:NewSea 出处:http://newsea.cnblogs.com/
QQ,MSN:iamnewsea@hotmail.com 如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。 |