图片如下:CheckBox 控件是在GridView的模版列里面。图片如下:
图片说明:当(一)后面的CheckBox 打钩时 其下面所有的 到(二)之前全部勾选,当(一)钩被取消时 其下面的也全部被取消;当(一)下面的CheckBox 有一个被勾选的,那么(一)必被勾选。 当1后面的CheckBox 被勾选时 其下面的1.1,1.2等等被勾选,当其中的1.1或1.2被勾选时 1必被勾选。其余的都是一样 不值得我 阐述的清晰不清晰。
 还有 就是 编号 列的内容在数据库中并没有这个字段,是用后台代码控制生成。模版中的CheckBox 的并没有value或text,所以 判断怎么样选择 我想只能根据页面中的 编号列的编号 来控制;请各位高手指点下 ,说详细点 我是菜鸟 ,一般我认为实现这样的效果只能靠javascript脚本语言来实现 ,但是很多人说用后台代码页可以实现,但是说的比较笼统,只是说能实现 具体的思路什么也没有 我是菜鸟 还请各位高手详细解说一下 最好能给个例子,在此 感激不尽 。
以下是前台的页面代码 请做参考!
页面代码如下html的
<asp:GridView ID="MyGridView1" 
            AutoGenerateColumns="False" runat="server" bordercolordark='#ffffff' bordercolorlight='#999999'
                    Style="border-collapse: inherit;" HorizontalAlign="Center" PagerStyle-HorizontalAlign="Right"
                    CssClass='table' CellPadding="2" EnableTheming="False" 
            EnableViewState="False" LoadDict="False" UseAccessibleHeader="False" 
            AddUrl="" onrowdatabound="MyGridView1_RowDataBound" >
                    <SelectedRowStyle BackColor="#00C0C0" />
                    <PagerStyle HorizontalAlign="Right" CssClass="footer" />
                    <HeaderStyle BackColor="#006699" HorizontalAlign="Center" Font-Bold="True" ForeColor="White" Height="20px" BorderStyle="Solid" CssClass="Freezing" />                    <AlternatingRowStyle BackColor="White" />
                    <PagerSettings Visible="False" />
                    
            <Columns>
                <asp:BoundField DataField="ProgAim" HeaderText="审计目标" ReadOnly="True" 
                    SortExpression="ProgAim" >
                    <ControlStyle Width="60px" />
                    <FooterStyle Width="60px" />
                    <HeaderStyle Width="60px" />
                    <ItemStyle Width="60px" />
                </asp:BoundField>
                <asp:BoundField HeaderText="编 号">
                    <ControlStyle Width="50px" />
                    <FooterStyle Width="50px" />
                    <HeaderStyle Width="50px" />
                    <ItemStyle Width="50px" />
                </asp:BoundField>
                <asp:BoundField DataField="ProgContent" HeaderText="可供选择的审计程序" 
                    SortExpression="ProgContent" />
                        <asp:TemplateField >
                          <HeaderTemplate>
                  <input id="Checkbox2" type="checkbox" onclick="CheckAll(this)" runat="server" /><label>全选</label>
                </HeaderTemplate>
                                <ItemTemplate>
                                    <input id="Checkbox1" type="checkbox" runat="server" onclick="checkChilds(this)" />
                                </ItemTemplate>
                                <ControlStyle Width="40px" />
                                <FooterStyle Width="40px" />
                                <HeaderStyle Width="40px" />
                                <ItemStyle Width="40px" />
                            </asp:TemplateField>
            </Columns>
        </asp:GridView>

解决方案 »

  1.   

    看不见图片,这个问题好像几天前刚见哈,搜看一下
    HTML的check控件有VALUE值,可以考虑用HTML控件
    给每个CHECK控件附加上JS事件
      

  2.   


    function CheckAll(strid,obj)
      {
        for(var i=0;i<document.all.length;i++)
        {
          if(document.all(i).type == 'checkbox' && document.all(i).parentElement.id == strid) document.all(i).checked = obj.checked;
        }
      }
    obj是全选按钮,strid是checkbox控件的父容器ID,方法大概是这样,你可以改的更有效率一些,这是4年前写的,新写的在公司,家里我懒得去更改
      

  3.   

    <asp:TemplateColumn HeaderText="&lt;input type=checkbox name='selectall' onClick='SelectAll(document.Form1)'&gt;全选">
    <ItemTemplate>
    <asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    function SelectAll(frm)
    {
        for (var i=0;i<frm.elements.length;i++)
          frm.elements[i].checked = frm.selectall.checked;
     }
      
    function CheckSelect(frm)
    {
    var col=frm.elements;
    var obj=frm.selectall;
    var intEls=0,intChks=0;
    for(var i=0;i<col.length;i++)
    {
    if(col[i].type=="checkbox"&&col[i].name!="selectall")
    {
    intEls++;
    if(col[i].checked)
    intChks++;
    }
    }
    obj.checked=(intEls==intChks);
    }
      

  4.   

    CS代码,我是用DATALIST实现的,GRIDVIEW也差不多吧if (((CheckBox)sender).Checked)
                {
                    for (int i = 0; i < DataList1.Items.Count; i++)
                    {
                        CheckBox cb = (CheckBox)DataList1.Items[i].FindControl("cb");
                        cb.Checked = true;
                    }
                }
                else
                {
                    for (int i = 0; i < DataList1.Items.Count; i++)
                    {
                        CheckBox cb = (CheckBox)DataList1.Items[i].FindControl("cb");
                        cb.Checked = false;
                    }
                }另外附上获得所选CheckBox对应的ID代码
     for (int i = 0; i < DataList1.Items.Count; i++)
                {
                    CheckBox cb = (CheckBox)DataList1.Items[i].FindControl("cb");
                    HiddenField hf = (HiddenField)DataList1.Items[i].FindControl("HiddenField1");
                  if(cb.check)
                  {
                 //...
                  }
         }
    用了一个影藏域,绑定数据库里面的ID,希望对你有帮助.
      

  5.   

    http://hiphotos.baidu.com/bq1129/pic/item/80ed361e9fe38b47f724e4d8.jpeg上面的是图片的地址 请各位看下!
      

  6.   


    <script type="text/javascript" language="javascript" >
        function checkAll(check)
        {
            var che=document.getElementsByTagName("input");
            for(i=0;i<che.length;i++)
            {
                if(che[i].type=="checkbox")
                {
                    che[i].checked=check.checked;
                }
            }
        }
    </script>
      

  7.   

    和51JOB选择职业的差不多吧,值得学习!
      

  8.   

    js代码
    <script language=javascript>
    function Sel()
    {
    oEl = event.srcElement;for(i = 0;i < document.all.length; i++)
    {
                                                  // datagrid将生成层次名+id作为客户端id
    if(document.all(i).id.indexOf("你的CheckBox的ID") != -1)
    {
    if(oEl.checked)
    document.all(i).checked = true;
    else
    document.all(i).checked = false;
    }
    }
    }
    </script>
    GridView中的代码:<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">
                                            <Columns>
                                                <asp:BoundField DataField="pid" HeaderText="Id" />
    <!--关键是这段代码-->
                                                <asp:TemplateField>
                                                <HeaderTemplate>
                                                 <input id="chkAll" onclick="Sel()"  type="checkbox" />                                            </HeaderTemplate>
                                                    <ItemTemplate>
                                                        <asp:CheckBox ID="cbselect" runat="server" />
                                                    </ItemTemplate>
                                                </asp:TemplateField>
    <!--关键是这段代码-->
                                                <asp:TemplateField HeaderText="商品名称">
                                                    <ItemTemplate>
                                                    <a href='DetailProduceInfo.aspx?pid=<%#Eval("pid") %>' target="_blank"><%#Eval("pname") %></a>    
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                                <asp:TemplateField HeaderText="单价">
                                                    <ItemTemplate>
                                                          <%#Eval("pmoney") %>
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                                <asp:TemplateField HeaderText="数量">
                                                    <ItemTemplate>
                                                        <asp:TextBox ID="txtquantity" runat="server" Width="80px">0</asp:TextBox>
                                                        <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="txtquantity"
                                                            ErrorMessage="请你输入数字!" ValidationExpression="^[0-9]{1,}$"></asp:RegularExpressionValidator>
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                            </Columns>
                                        </asp:GridView>
      

  9.   

    晕死 今天都没人啊  怎么样都没有回帖的啊 分都不要了啊
      哈哈 以上几种方案我都试了 全选还可以 但是我要 控制 选中 父节点 子节点就全部被选中 只要有一个子节点被选中 父节点就被选中而且 checkbox是GridView里面的空间 没有value数值 ;还请高手指点下啊 !