在GridView中怎么也找不到控件!!
在前台部分代码是这样写的:
<asp:GridView ID="gvMachineInfo" runat="server" BackColor="LightGoldenrodYellow"
                        BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black"                         ......                        <Columns>
                            <asp:TemplateField HeaderText="选">
                                <HeaderTemplate>
                                    <asp:CheckBox ID="chkSelectedAll" runat="server" ToolTip="选择所有记录" OnCheckedChanged="CheckedChangedHandler" />
                                </HeaderTemplate>
                                <ItemStyle HorizontalAlign="Center" Width="25px" />
                                <ItemTemplate>
                                    <asp:CheckBox ID="chkSelected" runat="server" ToolTip="选择当前记录" />
                                </ItemTemplate>
                            </asp:TemplateField>
                          ......
</GridView>
然后在后台的代码是:
    public void CheckedChangedHandler(object sender, EventArgs e)//为什么没有调用???
    {
      CheckBox chkSelectedAll = (CheckBox)gvMachineInfo.FindControl("chkSelectedAll");
      for (int i = 1; i < gvMachineInfo.Rows.Count; i++)
      {
        CheckBox chk=(CheckBox)gvMachineInfo.Rows[i].FindControl("chkSelected");
        if (chkSelectedAll.Checked == true)
        {
          chk.Checked = true;
        }
        else
        {
          chk.Checked = false;
        }
      }
    }
我是想通过ID为chkSelectedAl的CheckBox控件来实现全选的功能,然而它的OnCheckedChanged的委托事件并末发生,似乎在生成的页面源码中并没有这个控件。到底是为什么呢?我该怎样做才能找到这个控件呢?我弄得头焦额烂了还不行,还请各位大鸟多多指教~~~~~

解决方案 »

  1.   

    楼主的事件又问题吧,要全删除做个循环,从GridView中找控件,以ROW循环
    判断ROW中的chkSelected是否Checked   。如果true,通过ROW的主键删除。
      

  2.   

    checkbox的autopostback设置为true没?
      

  3.   

    可能是因为LZ把控件放在头模板了, 
    CheckBox   chkSelectedAll   =   (CheckBox)gvMachineInfo.FindControl("chkSelectedAll");
    这以段估计不能找到控件
    换下面一个看看能不能找到控件。
     CheckBox   chkSelectedAll   =   (CheckBox)gvMachineInfo.HeaderRow.FindControl("chkSelectedAll");
      

  4.   

    生成页面当中的ID叫clientID不是你控件设置成的ID,
      

  5.   

    把checkbox的autopostback设置为true后能调用到事件处理程序,可是第二个问题出现了,当运行到if (chkSelectedAll.Checked == true)这一句的时候提示"未将对象引用设置到对象的实例",也就说它的值为null了。到底怎么回事?我刚接触.NET不久,很多地方都没弄明白的,希望各位多多带挈
      

  6.   

    可以试一下这样行不行:
    CheckBox chkSelectedAll = (CheckBox)gvMachineInfo.Rows(index).FindControl("chkSelectedAll"); 
      

  7.   

    当运行到if   (chkSelectedAll.Checked   ==   true)这一句的时候提示"未将对象引用设置到对象的实例",也就说它的值为null了。到底怎么回事?
    这个问题应该是没有找到ID号为chkSelectedAll这个的东东.
    可以试一下这样行不行: 
    CheckBox   chkSelectedAll   =   (CheckBox)gvMachineInfo.Rows(index).FindControl("chkSelectedAll");   
      

  8.   

    你这样全选多选是很没有效率的,建议你看看这个
    http://www.cnblogs.com/zm235/archive/2006/09/23/512651.html针对你的问题: (CheckBox)gvMachineInfo.HeaderRow.FindControl("chkSelectedAll"); 这来定位控件了?
      

  9.   

    当运行到if       (chkSelectedAll.Checked       ==       true)这一句的时候提示"未将对象引用设置到对象的实例",也就说它的值为null了。到底怎么回事? 
    这个问题应该是没有找到ID号为chkSelectedAll这个的东东. 
    可以试一下这样行不行:   
    CheckBox       chkSelectedAll       =       (CheckBox)gvMachineInfo.Rows(index).FindControl("chkSelectedAll"); 
    --------------------
    再仔细看看,别人的前台代码,这个checkbox放在哪里的!    
      

  10.   

    CheckBox   chkSelectedAll   =   (CheckBox)gvMachineInfo.FindControl("chkSelectedAll"); 改成
    (CheckBox)e.FindControl("chkSelectedAll");
      

  11.   

    楼上的可能需要再改一下:
    (CheckBox)e.Items.FindControl("chkSelectedAll");
    我手上没有.net运行环境-_-
      

  12.   

    可以这样写
    1.给id为"chkSelected”的checkbox加个Init事件,
    CheckBox chkSelect = sender as CheckBox;
    ClientScript.RegisterArrayDeclaration("CheckBox_ID", String.Format("\"{0}\"", chkSelected.ClientID));
    2.给GridView加个DataBound事件,
    StringBuilder script = new StringBuilder();
    script.AppendLine("<script type=\"text/javascript\">");
    script.AppendLine("<!--");
    script.AppendLine("function SelectAll(obj)");
    script.AppendLine("{");
    script.AppendLine("    var checked = obj.checked;");
    script.AppendLine("    for(var i=0; i<CheckBox_ID.length; i++)");
    script.AppendLine("    {");
    script.AppendLine("        window.document.getElementById(CheckBox_ID[i]).checked = checked;");
    script.AppendLine("    }");
    script.AppendLine("}");
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CheckBox_ID", script.ToString());
    chkSelectedAll.Attributes["onclick"] = "SelectAll(this);";
      

  13.   

    谢谢谢大家,:)用PKERX 和 jimu8130 的方法解决问题了,谢谢你们