Asp.net DevExpress旧版ASPxGridView:如何使列标题复选框全部选中或全部清除;是否还有单独的行复选框影响标题复选框?

Asp.net DevExpress旧版ASPxGridView:如何使列标题复选框全部选中或全部清除;是否还有单独的行复选框影响标题复选框?,asp.net,vb.net,checkbox,devexpress,aspxgridview,Asp.net,Vb.net,Checkbox,Devexpress,Aspxgridview,请原谅这个看似重复的问题,但经过两个小时的研究和几个代码示例,我还没有看到一个真正适合我的 我有一个我正在为之工作的客户机,它有一个典型的UI需求,需要一个网格,第一列是复选框。。。带有复选框标题,单击该标题可以选中(或全部清除)每个数据行中的其他复选框。如果选中单个行的复选框,则他们希望该状态反映在标题复选框中;i、 e.只有在选中所有其他可见行时,才会选中标题复选框。我还希望能够(当然)根据服务器端的选中行执行一些操作 我只能使用他们目前许可的12.2.5版本的DevExpress控件,当然

请原谅这个看似重复的问题,但经过两个小时的研究和几个代码示例,我还没有看到一个真正适合我的

我有一个我正在为之工作的客户机,它有一个典型的UI需求,需要一个网格,第一列是复选框。。。带有复选框标题,单击该标题可以选中(或全部清除)每个数据行中的其他复选框。如果选中单个行的复选框,则他们希望该状态反映在标题复选框中;i、 e.只有在选中所有其他可见行时,才会选中标题复选框。我还希望能够(当然)根据服务器端的选中行执行一些操作

我只能使用他们目前许可的12.2.5版本的DevExpress控件,当然,我使用的是ASPxGridView,因为这是一个web应用程序。正如我已经说过的,在看了几个代码示例之后,我似乎无法使其正常工作。我已经粘贴了我正在处理的代码的简化版本,希望能在这里得到一些指导。(注意:请不要建议“升级到最新版本”,我在这里没有这个选项!)非常感谢您的帮助

巴里·L·坎普

代码如下:

ASPX页面

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="TestPage.aspx.vb" Inherits="TestApp.TestPage" %>

<%@ Register assembly="DevExpress.Web.v12.2, Version=12.2.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.Web.ASPxGridView" tagprefix="dx" %>
<%@ Register assembly="DevExpress.Web.v12.2, Version=12.2.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.Web.ASPxEditors" tagprefix="dx" %>

<!doctype html />

<html>
<head>

  <script type="text/javascript">
    function checkAllCheckBox_OnCheckedChanged(sender, e) {
      var checked = sender.GetChecked();
      // Loop to set all checkboxes to column header checkbox state...?
    }
  </script>

</head>

<body>
  <dx:ASPxGridView ID="SomeInformationGridView" runat="server" KeyFieldName="ID" ClientInstanceName="grid" AutoGenerateColumns="False" SettingsPager-Mode="ShowPager" SettingsPager-PageSize="50" style="width: 95%;">
    <SettingsBehavior AllowGroup="false" AllowDragDrop="false" />

    <Columns>

      <dx:GridViewCommandColumn ShowSelectCheckbox="true" VisibleIndex="0" Width="32px" CellStyle-HorizontalAlign="Center">
        <HeaderTemplate>
          <dx:ASPxCheckBox ID="CheckAllCheckBox" runat="server" AutoPostBack="false" clientinstancename="checkAllCheckBox" OnInit="CheckAllCheckBox_Init">
            <ClientSideEvents CheckedChanged="checkAllCheckBox_OnCheckedChanged" />
          </dx:ASPxCheckBox>
        </HeaderTemplate>
        <HeaderStyle HorizontalAlign="Center" />
      </dx:GridViewCommandColumn>

      <dx:GridViewDataTextColumn FieldName="ID" VisibleIndex="1" Visible="false" ReadOnly="true" CellStyle-HorizontalAlign="Center">
        <HeaderStyle HorizontalAlign="Center" />
      </dx:GridViewDataTextColumn>
      <dx:GridViewDataTextColumn FieldName="SomeOtherData" VisibleIndex="2" Visible="true" ReadOnly="true" CellStyle-HorizontalAlign="Center">
        <HeaderStyle HorizontalAlign="Center" />
      </dx:GridViewDataTextColumn>

      <--! Other Columns Here -->

    </Columns>
  </dx:ASPxGridView>

</body>
</html>

尝试在gridheader模板中添加以下js和html调用:

       //javascript function 
     function CheckAll(chkBx, gvID)
    {
        var gv = document.getElementById(gvID);
        for (i = 1; i < gv.rows.length; i++) {
            if (gv.rows[i].style.display != 'none') {
                gv.rows[i].cells[0].getElementsByTagName("INPUT")[0].checked = chkBx.checked;
            }
        };
    };

   //add this to your grid header template
   <HeaderTemplate>
        <asp:CheckBox ID="chkAllAvail"  ToolTip="Select all" runat="server"   onclick="CheckAll(this, 'SomeInformationGridView');"    Visible="true" />
         </HeaderTemplate>
//javascript函数
功能检查全部(chkBx,gvID)
{
var gv=document.getElementById(gvID);
对于(i=1;i
我只能使用他们当前许可的DevExpress控件版本12.2.5

是的,如果您使用的是这样一个较旧的版本,则有必要使用一组代码来模拟此功能


查看说明以了解如何完成此操作。

非常感谢。。。当我早上回去工作的时候,我会看一看。对不起,这对我来说并不完全有效。我需要利用DevExpress控件,并且仍然需要利用每个控件服务器端所有行的复选框值。不过,我很感谢你的回答,你应该知道不是我否决了你的回答。感谢你的回答,但这是我在发帖之前读到的文章之一。它对我不起作用;此外,我只需要一个复选框,而不是两个复选框,这很复杂。然后,实现所需的复选框(对于单个页面或所有页面)。最后有一个链接指向一个正在运行的示例。最终,我实现了这一点,但我不得不修改解决方案,使其只考虑“cbPage”变量。客户只想要这种行为,并且理解必须一次选择一页,选择所有行的含义。在标题中有两个复选框被认为是令人困惑的,我倾向于同意。但是,我现在已经实现了这一点,并将其标记为解决方案。谢谢你的帮助。
       //javascript function 
     function CheckAll(chkBx, gvID)
    {
        var gv = document.getElementById(gvID);
        for (i = 1; i < gv.rows.length; i++) {
            if (gv.rows[i].style.display != 'none') {
                gv.rows[i].cells[0].getElementsByTagName("INPUT")[0].checked = chkBx.checked;
            }
        };
    };

   //add this to your grid header template
   <HeaderTemplate>
        <asp:CheckBox ID="chkAllAvail"  ToolTip="Select all" runat="server"   onclick="CheckAll(this, 'SomeInformationGridView');"    Visible="true" />
         </HeaderTemplate>