【问题标题】:Check all CheckBoxes in Telerik RadGrid检查 Telerik RadGrid 中的所有复选框
【发布时间】:2012-12-14 18:33:23
【问题描述】:

我从以下链接复制了代码 Check all CheckBoxes in Telerik nested Grid in C#

当我运行代码时,我得到了这个错误:

0x800a01b6 - Microsoft JScript runtime error: Object doesn't support this property or method

并且'checkAll(this, gridToCheckAll);'在错误的动态运行代码中突出显示。

任何帮助将不胜感激。

<script>
var gridToCheckAll = '<%= rgFiles.ClientID %>';

    function checkAll(sender, containerID) {
        var checked = sender.checked;
        var container = document.getElementById(containerID);
        var checkboxes = container.getElementsByTagName('input');
        for (var i = 0, l = checkboxes.length; i < l; i++) {
            if (checkboxes[i] != sender && !checkboxes[i].disabled)
                checkboxes[i].checked = checked;
        }
    }
</script>

<telerik:RadGrid id="rgFiles" runat="server" HorizontalAlign="NotSet" BackColor="darkgray"
    AllowPaging="True" PageSize="50" AllowSorting="True"
    EnableEmbeddedScripts="true" 
    OnNeedDataSource="rgFiles_NeedDataSource"  
    OnItemCommand="rgFiles_ItemCommand" 
    OnItemDataBound="rgFiles_ItemDataBound" 
    OnItemEvent="rgFiles_ItemEvent"
    AllowMultiRowSelection="true" Skin="" 
    AllowFilteringByColumn="true" EnableLinqExpressions="false" >
    <MasterTableView  HorizontalAlign="NotSet" AutoGenerateColumns="false" AllowSorting="True"
        Font-Size="7pt" AllowCustomSorting="true" CellPadding="2" CellSpacing="1" BorderWidth="0px"
        TableLayout="Fixed" AlternatingItemStyle-Wrap="false" ItemStyle-Wrap="false" 
        CommandItemStyle-Wrap="false" >
        <FooterStyle CssClass="datagrid-footerstyle" HorizontalAlign="Right" />
        <ItemStyle CssClass="datagrid-itemstyle" Wrap="false" Font-Size="XX-Small" Height="15px"/>
        <EditItemStyle BackColor="#2461BF" />
        <PagerStyle BackColor="#E0E0E0" ForeColor="DimGray" HorizontalAlign="Left" Mode="NextPrevAndNumeric"
            NextPageText="next" PrevPageText="prev" AlwaysVisible="True" />
        <HeaderStyle CssClass="datagrid-headerstyle" ForeColor="White" />
        <FilterItemStyle BackColor="#a9a9a9" />
        <AlternatingItemStyle CssClass="datagrid-alternatingitemstyle" />
        <ExpandCollapseColumn Visible="False">
            <HeaderStyle Width="19px" />
        </ExpandCollapseColumn>
        <RowIndicatorColumn Visible="False">
            <HeaderStyle Width="20px" />
        </RowIndicatorColumn>
        <Columns>
            <telerik:GridTemplateColumn SortExpression="Reviewed"  DataField="Reviewed" HeaderText="<input type='checkbox' id='checkAll' onclick='checkAll(this, gridToCheckAll);'>" 
                UniqueName="Reviewed" AllowFiltering="false" >
                <ItemTemplate>
                    <asp:CheckBox ID="cbReviewed" runat="server" OnCheckedChanged="cbReviewed_CheckedChanged" />
                </ItemTemplate>
                <ItemStyle Wrap="False" HorizontalAlign="Center" VerticalAlign="Top"></ItemStyle>
                <HeaderStyle Width="50px"></HeaderStyle>
            </telerik:GridTemplateColumn>

【问题讨论】:

    标签: c# telerik radgrid


    【解决方案1】:

    也许您应该使用 Telerik:GridClientSelectColumn 代替您的 templateColumn,Telerik 具有您正在寻找的内置功能。

    API:http://www.telerik.com/help/aspnet-ajax/grid-column-types.html

    <radgrid...>
    <masterTableView ... >
       <columns>
          <telerik:GridClientSelectColumn UniqueName="ClientSelectColumn">
               <HeaderStyle Width="35px" />
           </telerik:GridClientSelectColumn>
        </columns>
    </MasterTableView>
     <ClientSettings>
           <ClientEvents OnRowSelected="RowSelected" OnRowDeselected="RowDeselected"/>
     </ClientSettings>
    </radgrid>
    
    
           function RowDeselected(sender, eventArgs){
                //your code
            }
    
            function RowSelected(sender,eventArgs)
            {
                var MasterTable = sender.get_masterTableView();
                var selectedRows = MasterTable.get_selectedItems();
                var selectedRowsCount = selectedRows.length;
                //etc
            }
    

    【讨论】:

    • 我试过了。问题是我必须告诉用户何时选择复选框并使用该框中的适当布尔值更新记录,因为用户可以选择将其标记为已审核或将其更改为未审核,我也使用选定的行将文件压缩在一起并在用户选择时一次流式传输。所以这个盒子被用于多种不同的功能。 GridClientSelectColumn 不允许检测客户端何时更改了我在任何地方找到的复选框。
    • 我相信按照您的描述,这仍然有效。您可以附加 clientEvents OnRowSelected、OnRowDeselected 以检测用户何时单击或取消单击该行。
    • 这几乎可以工作,只是我需要它能够调用在更新之前进行一些处理的服务器端代码。诸如是授权进行更新的人,或者他们只能下载文件。类似的东西
    【解决方案2】:

    我知道我来不及回答最初的问题。但仍想为其他开发者提供我的反馈。

    在这两个地方将你的 java 脚本方法名从 checkAll() 更改为其他任何东西,你就不会看到这个讨厌的 JS 错误:)

    【讨论】:

      猜你喜欢
      • 2011-08-18
      • 1970-01-01
      • 2020-03-29
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 2016-02-07
      相关资源
      最近更新 更多