WebForm的Grid页面页脚DropDownList事件[通俗易懂]

WebForm的Grid页面页脚DropDownList事件[通俗易懂]帖子http://community.csdn.net/Expert/topic/3506/3506615.xml?temp=.5394251中,提到了一个很有意思的问题。【我的datagrid的页脚有一个dropdownload控件,如果是一个BUTTON按钮的话,可以在datagrid的DG_Card_ItemCommand事件里来响应BUTTON按钮的事件,e.CommandName==

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

帖子
http://community.csdn.net/Expert/topic/3506/3506615.xml?temp=.5394251
中,提到了一个很有意思的问题。

【我的datagrid的页脚有一个dropdownload控件,如果是一个BUTTON按钮的话,可以在datagrid的
DG_Card_ItemCommand事件里来响应BUTTON按钮的事件,e.CommandName==”IButton_Name”得到

而我现在是一个dropdownload控件,当它选定一条记录的时候,怎么触发他的事件啊】

 

之前我也曾经看到过类似的问题,想当然的认为加上一个事件不就可以了吗
但是发现
在模板列,或者页眉页脚里面的DropDownList
激发不了Grid的ItemCommand事件
根本捕获不了

这算是一个大大的误区吧,没有任何验证的情况下,我居然认为,Grid里面的其他控件,只能通过激活
Grid的Itemcommand的事件来进行自己的事件操作。浮浅的很,-_-#。

于是就想好好的看看这个问题的到底怎么个意思。

参考了一些资料(包括Sunmast这个小 样 儿的blog),另外和戏子这个JR讨论了一下,终于有点明白了。

转载Sunmast的blog

By icyer(我们的大斑竹) from CSDN

首先来看看这两个事件
ItemDataBound,ItemCreated的发生时间

ItemDataBound嘛,只要执行了DataBind方法,就会马上激发这个事件。
ItemCreated呢,如果页面是第一次访问(Page.IsPostBack = false),那在第一次执行DataBind的时候,会先激发ItemCreated事件,也就是说,执行了DataBind后,首先会用ItemCreated来建立Header行,然后用ItemDataBound来绑定Header行,再用ItemCreated来建立第一行,再调用ItemDataBound来绑定第一行,也就是说ItemCreated和ItemDataBound是交替执行的。
页面返回时,也会执行ItemCreated事件,在Page_Load之前,但是这时候就不会再执行ItemDataBound事件了。

 

我们写程序的时候,一般都会有这个
Page_Load
if(!Page.IsPostBack)
{

   DataGrid1.DataSouce = ……….;
   DataGrid1.DataBind();
}

所以,在页面第一次加载的时候,我们是执行了这个ItemDataBound事件的。
但是当页面回发的时候,这个ItemDataBound事件就不再执行了。
众所周知,ViewState不会记住控件的事件,只会记住一些属性。
事件的恢复是根据InitializeComponent()这个方法来的。

所以,如果把DropDownList的事件注册,放到ItemDataBound方法里面,页面一个PostBack,事件马上丢失。
但是,如果把DropDownList的事件注册,放到ItemCreated方法里面,即使页面PostBack,事件也不会丢失,
因为Page_Load之前,重新调用了这个ItemCreated方法,这个方法是不受IsPostBack的限制的。

至此,这个问题就很清楚了。

但是,由于每次页面PostBack,都要执行ItemCreated方法,那么肯定会对效率有所影响。所以,我们能不能给出另外一种解决方法呢。戏子这个JR就提出,可以在编辑期间,就给这个DropDownList注册事件。
当然,在Grid模板列里面,点击这个DropDownList没有事件的那个闪电符号可以选择,但是我们可以改他的HTML

<asp:DropDownList id=”DropDownList2″ runat=”server” OnSelectedIndexChange=”ddl_SelectedIndexChanged”></asp:DropDownList>

这样,我们就不用动态的给这个DropDonwList注册事件了
我们仅仅需要在ItemDataBound方法里面来绑定它的数据就可以了
ps:不要忘了把ddl_SelectedIndexChanged这个方法设置为protected

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194843.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • C语言 — void的用法解析[通俗易懂]

    C语言 — void的用法解析[通俗易懂]C语言-void的用法解析简介​ void中文翻译为”无类型”,有的也叫”空类型”。常用在程序中对定义函数的参数类型、返回值、函数中指针类型进行声明。用法​ void应用最广泛的就是跟指针结合,即void* //无类型指针,也称为空指针,可以指向任何类型的数据 //注意一点:当我们需要使用void类型的的指针变量区指向 某一类型的变量的时候,必须要对其进行类型转换​ 这里补充一点:因为我们在定义一个指针变量的时候第一件事就是指定我们指针变量所指向的变量的类型。一

  • 高德地图标记点要注意的问题

    高德地图标记点要注意的问题高德地图标记点要注意的问题当打开高德地图的时候,使用API进行获取自身位置坐标,然后再进行setCenter设置中心是这样的。直接看代码:initMap(){//初始化地图map=newAMap.Map(‘map-gaode’,{resizeEnable:true,zoom:13})//初始化中心点//1、无坐标有详细地址时letsure=this.initAddress()

  • leetcode, LC5: insertion-sort-list[通俗易懂]

    leetcode, LC5: insertion-sort-list[通俗易懂]题目描述使用插入排序对链表进行排序。Sortalinkedlistusinginsertionsort.示例1输入{3,2,4}输出{2,3,4}解题思路new一个新的ListNode作为选择排序好的链表的表头对于原始链表中的每一个结点2.1.寻找新链表中该结点的插入位置2.2插入该结点返回新链表代码实现/***structListNode{* intval;* structListNode*next;

  • static–静态变量与普通变量的区别

    static–静态变量与普通变量的区别静态变量与普通变量的区别全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,…

  • 查看所有java进程命令_查看java线程

    查看所有java进程命令_查看java线程linux查看java进程数[2021-02-1008:01:50]简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace(“/(\s|\&nbsp\;| |\xc2\xa0)/”,””,strip_tags($val));”方法去除所有nbsp即可。推荐:《PHP视频教linux查看端口被哪个进程占用的方法:1、使用“lsof-…

    2022年10月26日
  • 【数据结构】十字链表

    【数据结构】十字链表介绍了有向图的链式存储结构:十字链。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号