经过debug发现无论勾选几个,chk.Checked始终等于falseCheckBox chk = (CheckBox)Rp.FindControl("chkMsg");这行代码已确定可以找到控件chkMsg请问高手,为什么chk.Checked的值总是false
        foreach (RepeaterItem Rp in this.msgRepeater.Items)
        {
            CheckBox chk = (CheckBox)Rp.FindControl("chkMsg");
            {
                if (chk.Checked)
                {
                    Label lbl = (Label)Rp.FindControl("lblMsg");
                    id = lbl.Text;
                    cmd.CommandText = "delete from msg where msgID = " + Convert.ToInt32(id);
                    cmd.ExecuteNonQuery();                
                }            }
        }

解决方案 »

  1.   

    PagelOAD里面绑定的代码没有!ispostback
    或者不在<form runat=server>里面
      

  2.   

    在repeater里是这样的
    <ItemTemplate>
                    <tr>
                        <td style="width:160px;">
                            <%#DataBinder.Eval(Container.DataItem,"userNickName","昵称:{0}") %>
                        </td>
                        <td style="width:90%">
                            <%#DataBinder.Eval(Container.DataItem,"msgDate","留言时间:{0}")%>&nbsp;&nbsp;<asp:Label ID="lblMsgID" Text =<%#DataBinder.Eval(Container.DataItem,"msgID","{0}") %> runat="server"></asp:Label>
                        </td>
                        <td>
                            <asp:CheckBox ID="chkMsg" Visible = "false" runat="server"/>
                        </td>
                    </tr>.....</ItemTemplate>应该没问题啊,前面语句用过
     if (power > 0)
            {
                foreach (RepeaterItem Rp in this.msgRepeater.Items)
                {
                    CheckBox chk = (CheckBox)Rp.FindControl("chkMsg");
                    chk.Visible = true;
                }
            }都可以使chk.Visible 设为true
      

  3.   

    现在的问题是无论勾选几个,chk.Checked的值总是false
      

  4.   

    判断不了跟!IsPostBack没什么关系吧..
      

  5.   

    在pageload()里绑定?
    我是直接在<ItemTemplate> 里添加的啊
      

  6.   

    把绑定的代码放到
    pageload()下面的
    if(!ispostback)
    {
    绑定代码...
    }
      

  7.   

    在repeater里是这样的 
    <ItemTemplate> 
                                    <tr> 
                                            <td   style= "width:160px; "> 
                                                    <%#DataBinder.Eval(Container.DataItem, "userNickName ", "昵称:{0} ")   %> 
                                            </td> 
                                            <td   style= "width:90% "> 
                                                    <%#DataBinder.Eval(Container.DataItem, "msgDate ", "留言时间:{0} ")%> &nbsp;&nbsp; <asp:Label   ID= "lblMsgID "   Text   = <%#DataBinder.Eval(Container.DataItem, "msgID ", "{0} ")   %>   runat= "server "> </asp:Label> 
                                            </td> 
                                            <td> 
                                                    <asp:CheckBox   ID= "chkMsg "   Visible   =   "false "   runat= "server "/>                                         </td> 
                                    </tr> ..... </ItemTemplate> 有一点想不明白,如果visible="false",那么lz是怎么勾选到的
      

  8.   

    找到你程序中的所有
    this.msgRepeater.DataBind(); 这一行
    或者
    msgRepeater.DataBind(); 这一行
    然后下断点
    再在以下代码的红色行下断点
    foreach (RepeaterItem Rp in this.msgRepeater.Items)
            {
                CheckBox chk = (CheckBox)Rp.FindControl("chkMsg");
                {
                    if (chk.Checked)
                    {
                        Label lbl = (Label)Rp.FindControl("lblMsg");
                        id = lbl.Text;
                        cmd.CommandText = "delete from msg where msgID = " + Convert.ToInt32(id);
                        cmd.ExecuteNonQuery();                
                    }            }
            }
    然后你起调试,当你想触发红色行的时候,看一下是否断点执行到了绿色行。
    如果执行到了绿色行就会出现你开头说的情况,因为重新做了绑定并且默认所有的复选框都没有被选中
      

  9.   

    原因已经找到了,相信你会解决的,结贴吧,给17楼的分数吧4楼和11楼的也可以给点分,他们也知道错误的原因,不过说的不太详细他们说的是解决的办法,我相信你一定是在Page_Load里绑定的
      

  10.   

    回16楼,我先设置为visable="false",然后根据登录用户权限判断,是否设置为true
      

  11.   

    执行foreach的时候,并没有重新绑定,我下断点测试了
      

  12.   

    Visible       =       "false   "    这个不是没了嘛汗....
      

  13.   

    不是啊,我判断用户权限,权限足够
    visible就等于true了啊。
      

  14.   

    先将<asp:CheckBox   ID= "chkMsg "   Visible   =   "false "   runat= "server "/> 
    改为<asp:CheckBox   ID= "chkMsg " Checked="True"  runat= "server "/> 
    然后查找所有的msgRepeater.DataBind(),把它改为如下语句
    if(!IsPostback) 

    msgRepeater.DataBind()

    最后在page_load事件的第一行添加如下代码
    foreach   (RepeaterItem   Rp   in   this.msgRepeater.Items) 
                 { 
                CheckBox   chk   =   (CheckBox)Rp.FindControl( "chkMsg "); 
                 } 
    在红色行设置断点查看chk的值
      

  15.   

      //对有没有选中进行判断直接按删除按钮则报错
            bool strDrive = false;
            try
            {
                SQLT.SetSQLBeginTrans();
                for (int i = 0; i < dlHuanzhe.Items.Count; i++)
                {
                    CheckBox CB = (CheckBox)dlHuanzhe.Items[i].FindControl("chk");                if (CB.Checked)
                    {
                        strDrive = true;
                        //隐藏传递ID用一个datatlist就是Parent一个
                        string delID = ((HiddenField)dlHuanzhe.Items[i].FindControl("id")).Value;
                    
                        SQLT.Operate("delete from F_Patient where id=" + delID);
                    }
                }
                SQLT.SetSQLCommitTrans();
                SQLT.ConClose();
            }
            catch
            {
                SQLT.SetSQLRollBack();
                MessageBox("00006", null);
                SQLT.ConClose();
            }
            if (!strDrive)//判断选中没有
            {
                MessageBox("00005", null);
            }
            else//删除后重新绑定
            {
                //删除后进行重新取总人数
                //this.lblRenNum.Text = CalculateRecord().ToString();
                this.BindShowF_Patient();
            }作为参考不知道对你有用没有
      

  16.   

    对了在page_load里面必须加入
     
     if(!ispostback) 

    绑定代码... 


    否则就是全选不中
    中午刚和给别人解决的问题