代码之家  ›  专栏  ›  技术社区  ›  pavanred

使用javascript控制gridview列可见性

  •  2
  • pavanred  · 技术社区  · 14 年前

    <asp:GridView ID="grdTest" runat="server" AutoGenerateColumns="False" Width="100%">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:CheckBox ID="chkResource" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Resource">
                <ItemTemplate>
                   <asp:Label ID="Resource" Text='<%# Bind("Resource") %>' runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
                   <asp:BoundField DataField="Description" HeaderText="Resource Description" HtmlEncode="false">
            <ItemStyle HorizontalAlign="Center" />
            <HeaderStyle HorizontalAlign="Center" />
        </asp:BoundField>
    
         </asp:TemplateField>
      </Columns>
    </asp:GridView>
    

    我可以使用以下命令在服务器端控制这些列的可见性-

    grdTest.Columns[n].Visible = false;
    

    但是,我必须使用javascript从客户端控制可见性。我试了很多次,但只能访问行对象或gridview的任何特定单元格。

    grid.rows[index].cells[i].style="display: none"; //for cell
    

    有没有办法访问gridview的column对象并使用javascript控制其可见性?

    2 回复  |  直到 12 年前
        1
  •  1
  •   Community CDub    11 年前

    您可以尝试调用服务器端代码。下面是用于调用代码的js函数:

    function HideColumns(sender, args)
    {
        PageMethods.HideSomeColumns(args, onSuccess, onError);
    }
    
    function onReportSuccess(result)
    {
    }
    
    function onReportError(error)
    {
        alert("There was an error.");
    }
    

    下面是用于隐藏所需列的服务器端函数:

    [WebMethod]
    [System.Web.Script.Services.ScriptMethod]
    public static void ReportTranslation(int n)
    {
        grdTest.Columns[n].Visible = false;
    }
    

    function show_hide_column(col_no, do_show) {
    
        var stl;
        if (do_show) stl = 'block'
        else         stl = 'none';
    
        var tbl  = document.getElementById('id_of_table');
        var rows = tbl.getElementsByTagName('tr');
    
        for (var row=0; row<rows.length;row++) {
          var cels = rows[row].getElementsByTagName('td')
          cels[col_no].style.display=stl;
        }
    }
    
        2
  •  0
  •   Chris Porter    11 年前

    一种更简单的方法是使用jQuery并在要显示/隐藏的列的单元格上设置CSS类名。

    <asp:GridView ID="grdTest" runat="server" AutoGenerateColumns="False" Width="100%">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate CssClass="hide-me">
                    <asp:CheckBox ID="chkResource" runat="server" />
                </ItemTemplate>
           </asp:TemplateField>
        </Columns>
    </asp:GridView>
    

    将可见性设置为display:none by 样式表中的默认值,或者也可以将其放入单元格的样式中:

    .hide-me { display: none; }
    

    然后使用jQuery从javascript:

    $('.click-me').click(function(e) {
        $('.hide-me').show();
        // OR you could use toggle:
        $('.hide-me').toggle();
    });