日期:2014-05-20  浏览次数:20810 次

在DataGrid里绑定CheckBox后,点CheckBox不起作用是怎么回事呀?
.aspx
<asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox   id= "chkSelect "   runat= "server "> </asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>


.cs
//方式一
private   void   Button4_Click(object   sender,   System.EventArgs   e)
{
      bool   noChecked   =   true;
      foreach(DataGridItem   dgi   in   DataGrid1.Items)
      {
                CheckBox   cb=(CheckBox)dgi.FindControl( "chkSelect ");
                if(cb.Checked)
                {//如果cb被选中的话,执行删除操作
Response.Write( " <script> alert( '成功! ') </script> ");
noChecked   =   false;
}    
    }
    if   (noChecked   ==   true)
    {
        Response.Write( " <script> alert( '您没有选择要删除的项目! ') </script> ");
    }
}
//方式二
private   void   Button4_Click(object   sender,   System.EventArgs   e)
{
    for(int   i=0;i <DataGrid1.Items.Count;i++)
    {
      CheckBox   cb=(CheckBox)DataGrid1.Items[i].FindControl( "ckbSelect ");
      if   (cb!=null)
      {
                if(cb.Checked)
                {
Response.Write( " <script> alert( '成功! ') </script> ");
}
else
                  {
  Response.Write( " <script> alert( '您没有选择要删除的项目! ') </script> ");
}
      }
}

在选择了CheckBox后,方式一和方式二都不出现 "成功 "提示,也就是cb为空,或者没选.不知道是怎么回事呀!请指点一下.十分感谢!




------解决方案--------------------
找到原因了:
并非没有状态记录,CHECKBOX选中状态在服务器回发后依然选中,由于Viewstate保持了状态。
其实由于数据源的重复绑定导致CHECKBOX状态被初始化!
改进办法就是把数据源的绑定代码放在
if(!IsPostBack)
{
}