主要解决三个问题:1. 选中列表头的CheckBox后,这一列即全部被选中.2. 选中一行中的"第一级别"后,后边的第二.第三.第四就变灰不能再选中了.3. 选中第三级别全列后.第五级别全列随即自动选中.请高手们复制看了之后,帮忙解决一下,在线等.谢谢!DataGrid布局如下:<asp:datagrid id="Datagrid2" style="Z-INDEX: 104; LEFT: 16px; POSITION: absolute; TOP: 200px"
runat="server" Width="100%" AutoGenerateColumns="False" BorderStyle="None" BackColor="White"
CellPadding="3" AllowSorting="True" BorderWidth="1px" BorderColor="#CCCCCC">
<SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#669999"></SelectedItemStyle>
<AlternatingItemStyle BackColor="#F3F3F3"></AlternatingItemStyle>
<ItemStyle ForeColor="#000066"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#006699"></HeaderStyle>
<FooterStyle ForeColor="#000066" BackColor="White"></FooterStyle>
<Columns>
<asp:BoundColumn DataField="DisplayName" SortExpression="DisplayName" HeaderText="级别名称"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="">
<HeaderTemplate>
<asp:CheckBox id="chkAdminAll" runat="server" Text="第一级别"></asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox id="chkAdmin" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="">
<HeaderTemplate>
<asp:CheckBox id="chkLookAll" runat="server" Text="第二级别"></asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox id="chkLook" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="">
<HeaderTemplate>
<asp:CheckBox id="chkAddNewAll" runat="server" Text="第三级别"></asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox id="chkAddNew" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="">
<HeaderTemplate>
<asp:CheckBox id="chkUpdateAll" runat="server" Text="第四级别"></asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox id="chkUpdate" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="">
<HeaderTemplate>
<asp:CheckBox id="chkDeleteAll" runat="server" Text="第五级别"></asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox id="chkDelete" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle HorizontalAlign="Left" ForeColor="#000066" BackColor="White" Mode="NumericPages"></PagerStyle>
</asp:datagrid>

解决方案 »

  1.   

    先解决第一个问题,用chkAdminAll来举例,其他一样
    后台加:
    protected void chkAdminAll_CheckedChanged(object sender, System.EventArgs e)
    {
    for(int i=0;i<Dtg.Items.Count;i++)
    {
    System.Web.UI.WebControls.CheckBox _chkItem=(System.Web.UI.WebControls.CheckBox)Dtg.Items[i].FindControl("chkAdmin");
    _chkItem.Checked=(_chkItem.Checked==true?false:true);
    }
    }
    前台:
    <asp:CheckBox id="chkAdminAll" runat="server" Text="第一级别"></asp:CheckBox>
    改成
    <asp:CheckBox id="chkAdminAll" runat="server" Text="第一级别" OnCheckedChanged="chkAdminAll_CheckedChanged"  AutoPostBack="true"></asp:CheckBox>done!
      

  2.   

    你可以用<input type=chexkbox id="" name="" onclick="clickbox(this)" value=<%数据绑定%>>然后再js中写你的逻辑//第一级的click
    function clickbox(obj)
    {
    var e;
    var i;
    if (obj.checked)
    {
    for( i=0; i<document.Form1.elements.length;i++)
    {
    e = document.Form1.elements[i];
    if(e.name=="chkAdmin")//第一列全选
    {
    e.checked = true;
    }
    if (e.name=="chkLookAll")//其他列变灰
    {
    e.disabled = true;
    }
    }
    }
    else
    {
    for( i=0; i<document.Form1.elements.length;i++)
    {
    e = document.Form1.elements[i];
    if(e.name=="chkAdmin")//第一列不选
    {
    e.checked = false;
    }
    if (e.name=="chkLookAll")//其他列恢复
    {
    e.disabled = false;
    }
    }
    }
    }其他的就类似了
      

  3.   

    再来第二个问题:
    后台加:
    protected void chkAdmin_CheckedChanged(object sender, System.EventArgs e)
    {
    for(int i=0;i<Dtg.Items.Count;i++)
    {
    System.Web.UI.WebControls.CheckBox _chkItem1=(System.Web.UI.WebControls.CheckBox)Dtg.Items[i].FindControl("chkAddNew");
    System.Web.UI.WebControls.CheckBox _chkItem2=(System.Web.UI.WebControls.CheckBox)Dtg.Items[i].FindControl("chkUpdate");
    System.Web.UI.WebControls.CheckBox _chkItem3=(System.Web.UI.WebControls.CheckBox)Dtg.Items[i].FindControl("chkLook");
    System.Web.UI.WebControls.CheckBox _chkItem4=(System.Web.UI.WebControls.CheckBox)Dtg.Items[i].FindControl("chkDelete");
    System.Web.UI.WebControls.CheckBox _chkItem=(System.Web.UI.WebControls.CheckBox)Dtg.Items[i].FindControl("chkAdmin");
    if(_chkItem.Checked)
    {
    _chkItem1.Enabled=false;
    _chkItem1.Checked=false;
    _chkItem2.Enabled=false;
    _chkItem2.Checked=false;
    _chkItem3.Enabled=false;
    _chkItem3.Checked=false;
    _chkItem4.Enabled=false;
    _chkItem4.Checked=false;
             }
    else
    {
    _chkItem1.Enabled=true;
    _chkItem2.Enabled=true;
    _chkItem3.Enabled=true;
    _chkItem4.Enabled=true;
    }
         }
    }
    前台:
    <asp:CheckBox id="chkAdmin" runat="server"></asp:CheckBox>
    改成:
    <asp:CheckBox id="chkAdmin" OnCheckedChanged="chkAdmin_CheckedChanged" AutoPostBack=true runat="server"></asp:CheckBox>
      

  4.   

    <asp:TemplateColumn HeaderText="">
    <HeaderTemplate>
    <input type=checkbox name="chkAdminAll" onclick="clickbox(this)">one
    </HeaderTemplate>
    <ItemTemplate>
    <input type=checkbox name="chkAdmin"> </ItemTemplate>
    </asp:TemplateColumn>类似于这样
    你还可以给checkbox绑定数据
    <input type=chexkbox name="" onclick="clickbox(this)" value='<%# DataBinder.Eval(Container.DataItem,"你的字段名") %>'>在后台拿值得时候可以直接Request["name"]就可以得到选中的checkbox
    比如string str = Request["chkAdmin"];就是所有选中的chkAdmin的value,用逗号分割的
      

  5.   

    你用google搜索datagrid就可以看到
      

  6.   

    http://www.cnblogs.com/smilnet/archive/2004/07/17/25150.aspx
    看下这个文章不知道能否帮助
      

  7.   

    首先你别用服务器的控件,用html的
    就是<input type=checkbox name="chkAdminAll" onclick="clickbox(this)">第一级//注意onclick这种其次,给你需要处理的checkbox上添加js事件,就是上面的onclick,给每个all的chexkbox都要加在次,在js事件里写你的逻辑
    比如全选,就是遍历所有的你需要选择的checkbox,把他们选中,就像上面的
    e = document.Form1.elements[i];
    if(e.name=="chkAdmin")//第一列全选
    {
    e.checked = true;
    }
    变灰使用disabled ,就像
    if (e.name=="chkLookAll")//其他列变灰,得判断你所有的需要变灰的checkbox,我这里只写了一个
    {
    e.disabled = true;
    }当全选checkbox取消选择的时候,你要把该列以及变灰的checkbox都恢复
    就是上面else的那段主要的代码就是这些,不知道这样解释你明白没?
    上面的代码我测试过,没有问题,你自己好好看看吧
    如果你想排序以后仍然保留选择,那你需要借助hidden,保存下来你的操作
    因为是客户端的东西,所以你post页面的时候肯定会丢失
    这部分代码就自己写吧
      

  8.   

    lovefootball(蟑螂)你好.那里有写JS吗?能不能给出详细一点的代码作示例谢谢!
      

  9.   

    lovefootball(蟑螂)谢谢你.我明白你的意思了.但我一定要用服务器控件的.因为我要利用那些值来更新数据的.还有一个.那个东西是绑定的.下次读它出来的时候.要读出它们上次设置的状态.令人头痛就是这里.
      

  10.   

    http://goody9807.611.cn/Announce/announce.asp?BoardID=2&ID=725&Upflag=1&Num=1
      

  11.   

    lovefootball(蟑螂)你好!经过你的指点,事情终于有进展了.但又出现两个新问题,能不能再帮一下忙?1. 例选中"第一级别"顶的CheckBox.下边的同一列的全选.这问题得到解决.在这个全选情况下我只要其中的三个.想达到的效果是.如果列不是选的话.顶的CheckBox自动变为不选中.如果全选中了就自动判断变为选中.2. 行的操作.例选中第一行第一列的时候.第一行的其它列就变灰.如何解决.
    恳请各位大侠顶力相助..感谢!