GridView模板之处理模板中的事件

      有时候你可能会需要响应那些由模板列中的控件产生的事件。例如你修改了前面示例中的代码,不使用静态图标而是用ImageButton控件创建一组可单击的图片链接:
      
                < asp:TemplateField  HeaderText ="Status" >
                
< ItemTemplate >
                    
< asp:ImageButton  ID ="ImageButton1"  runat ="server"  
                      ImageUrl
='<%#  GetStatusPicture(Container.DataItem) % > ' />
                 
</ ItemTemplate >
                
</ asp:TemplateField >
      
      问题是在模板中加入一个控件后,GridView为每个数据项创建一个该控件的副本。这样当单击ImageButton控件时,你需要通过这种方式确定被单击的图片属于哪一行
      解决这一问题的办法是使用GridView的事件而不是按钮事件。GridView.RowCommand事件就是起这个作用的,因为它在模板中的任意按钮被单击时发生。模板中的控件事件变成包含控件中的事件的过程叫做事件冒泡。
      当然,你还是要借助某种方式向RowCommand事件传递信息以识别事件究竟发生在哪一行。奥妙在于所有按钮控件的两个字符串属性:CommandName和CommandArgument。你可以为CommandName设置一个描述性的名字从而区分当前的单击时发生在ImageButton上还是GridView中的其他按钮上。CommandArgument提供一段与行有关的信息,通过它你可以区分被单击的行。可以通过数据绑定表达式提供这一信息。
     下面是修改过的ImageButton标记:
      
               < asp:TemplateField  HeaderText ="Status" >
                
< ItemTemplate >
                    
< asp:ImageButton  ID ="ImageButton1"  runat ="server"  
                      ImageUrl
='<%#  GetStatusPicture(Container.DataItem) % > '                      
                      CommandName="StatusClick"                      
                      CommandArgument='
<% Eval ( " ProductID " %> '
                     />
                 
</ ItemTemplate >
              
</ asp:TemplateField >

      下面是响应ImageButton单击所需要的代码:
      
         protected   void  GridView1_RowCommand( object  sender, GridViewCommandEventArgs e)
    {
        
if  (e.CommandName  ==   " StatusClick " )
            lblInfo.Text 
=   " You clicked product # "   +  e.CommandArgument;
    }

      这儿只是简单的在一个标记上显示ProductID

转载于:https://www.cnblogs.com/zjz008/archive/2009/09/24/1573359.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值