怎样为数据控件Itemtemplate内的控件添加事件[ASP.NET]

本文介绍了如何在ASP.NET的DataList或Repeater中为<Itemtemplate>内部的控件,如CheckBox,添加事件。通过循环Items并使用FindControl方法访问控件,同时讲解了在CheckBox上设置AutoPostBack属性以及在Page_Load事件中加入IsPostBack判断以确保数据绑定只在首次加载时执行。最后,详细解释了AutoPostBack的作用以及为何需要在IsPostBack中进行数据绑定。

怎么为<Itemtemplate></Itemtemplate>里的控件加事件
下面以DataList里的CheckBox为例
在讲事件之前顺便讲一下怎么访问Itemtemplate里的控件
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在DataList或者Repeater中,<Itemtemplate></Itemtemplate>里的控件在.cs文件里不能直接访问的,得像下面这样访问
//循环DataList里面的Control,
for (int i = 0; i < this.DataList1.Items.Count; i++)
        {
            //用FindControl()方法遍历找到控件强转成控件类型
            CheckBox chkbox = this.DataList1.Items[i].FindControl("chkFoodCheck") as CheckBox;
            //如果CheckBox 是被checked的,
            if (chkbox.Checked)
            {
                //做相应操作
            }
        }  
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
控件访问到了,现在我们来给DataList里的CheckBox控件加事件.
在前台的控件代码中加上AutoPostBack="true"  Checked='<%# Eval("Column1") %>' 此句为绑定的列
 <asp:CheckBox ID="chkFoodCheck" runat="server" AutoPostBack="true" Checked='<%# Eval("Selected") %>' OnCheckedChanged="chkFoodCheck_CheckedChanged" />

而要注意的一点就是,在Page_Load方法中,要加上if (!IsPostBack)的判断
  protected void Page_Load(object sender, EventArgs e)
    {
        //即如下:
       if (!IsPostBack)
         {
            DataList1.DataSource = 数据源表;
            DataList1.DataBind();       
         }
    }
     //然后在CheckBox的CheckedChanged中就可以做你想要的操作了
    protected void chkFoodCheck_CheckedChanged(object sender, EventArgs e)
    {
       //做相应操作
    }

下面做点解释:
1)为什么要加:AutoPostBack="true" 
MSDN上对AutoPostBack的解释是:获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。
初次加载页面时为False,再次加载时为True.加上这句才会去执行后台代码.

2)为什么要把数据绑定在if (!IsPostBack){}内,因为AutoPostBack="true" ,导致每次点击,页面都会自动刷新,会再次执行Page_Load方法,导致数据的重新绑定,这样的话你就取不到相应正确的选择项数据.

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值