不知哪里出错,老是得不到值,得到的结果是空。请大家帮忙解决一下,谢谢。
我要做的是:在datalist外一个button后,获取到datalist中checkboxlist时里面选中的值,现在不行了。郁闷。
代码是这样写的:
 protected void AddRight()
    {
        int roleId = Convert.ToInt32(Request.QueryString["RoleId"]);
        for (int i = 0; i <= dlstModuleRight.Items.Count - 1; i++)
        {
            CheckBoxList chkRights = (CheckBoxList)dlstModuleRight.Items[i].FindControl("chkRoleRight");
            //此句可以攻取ModuleId
            Label lblId = (Label)dlstModuleRight.Items[i].FindControl("lblModuleId");
            
            for(int j=0;j<=chkRights.Items.Count-1; j++)
            {
                if (chkRights.Items[j].Selected == true)
                {
                    Response.Write(chkRights.Items[j].Text);                }
                else
                {
                    Response.Write(j);
                }            }
         
麻烦大家帮忙,在线结分,谢谢。           
        }

解决方案 »

  1.   

    第一个常识问题..是否判断回传
    private void Page_Load(object sender, System.EventArgs e)
    {
    if (! IsPostBack ) 
    {
    //绑定数据
    }
    }
      

  2.   

    这句话有问题
    CheckBoxList chkRights = (CheckBoxList)dlstModuleRight.Items[i].FindControl("chkRoleRight");明白你在后台给他们命了chkRoleRight这个名称
    但是生成的aspx页面中就不是这个名字了
      

  3.   

    你可以获得包含的控件,然后用。。Controls[0]。。这种方法来获得控件
      

  4.   

    第一位兄弟的解答我已经做到的第二位兄弟的是:我在前台也是设置了相同的chkroleright的ID的,不是很明你的意思,能否解释清楚一些呢。按你的说法,应该如何命名呢?
      

  5.   

    剩下的代码没看出有什么错误,因为如果没找到chkRights的话,肯定要报空引用异常的错误
      

  6.   

    CheckBoxList chkRights = (CheckBoxList)dlstModuleRight.Items[i].FindControl("chkRoleRight");
    foreach(CheckBox cb in chkRights)
    if(cb.Checked)
    {}
    知道了吧
      

  7.   

    结果是循出checkboxlist的所有值,但是不能得到选中的值,直接打印出j值来了。前台的代码datalist如下:
    <asp:DataList ID="dlstModuleRight" runat="server" CellPadding="4" ForeColor="#333333" Width="645px">
        <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
        <SelectedItemStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
        <AlternatingItemStyle BackColor="White" />
        <ItemStyle BackColor="#E3EAEB" />
        <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
        <ItemTemplate>
        <div id="ModuleList">
        <ul>
        <li>模板名称:<asp:Label ID="lblModuleId" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"UBSModuleId")%>' Visible="false"></asp:Label><asp:Label runat="server" ID="lblModuleName" Text='<%#DataBinder.Eval(Container.DataItem,"UBSModuleName")%>'></asp:Label>   模板路径:<asp:label runat="server" ID="lblModulePath" Text='<%#DataBinder.Eval(Container.DataItem,"UBSModulePath")%>'></asp:label></li>
        <li>权限设定:<asp:CheckBoxList id="chkRoleRight" RepeatDirection="Horizontal" runat="server" >
        <asp:ListItem Text="阅读" Value="1"></asp:ListItem>
         <asp:ListItem Text="下载" Value="2"></asp:ListItem>
         <asp:ListItem Text="发布" Value="3"></asp:ListItem>
         <asp:ListItem Text="修改" Value="4"></asp:ListItem>
           <asp:ListItem Text="删除" Value="5"></asp:ListItem>
         <asp:ListItem Text="打印" Value="6"></asp:ListItem>   
         <asp:ListItem Text="所有" Value="7"></asp:ListItem>
       
        </asp:CheckBoxList></li>
        </ul></div>
        </ItemTemplate>
    </asp:DataList>
      

  8.   

    if (chkRights.Items[j].Selected == true)
    在这里设断点调试跟踪一下
      

  9.   

    jackwofe 你那个是checkbox的,我现在的是checkboxlist的
      

  10.   

    for(int i=0;i<checkboxlist1.items.count;i++)
    {
    if(checkboxlist1.item[i].selected)
    msg.text+=checkboslist.items[i].text;
    }
      

  11.   

    lz关于checkboxlist1的代码没什么错,但是如果你是多行的多选框,要注意逻辑,这种写法总是会输出j值的,建议先不输出else部分调试
    if (chkRights.Items[j].Selected )
    {
      Response.Write(chkRights.Items[j].Text+"<br>");
    }
      

  12.   


    页面回发之后 CheckBox 还保持选中状态迈?如果不是 !IsPostBack ,就有点诡异了
      

  13.   

    我换成gridview就OK了,郁闷,早知一早用gridview了,感谢各位兄弟.