Excel喜欢 ASP.NET 应用程序中的过滤

本文关键字:过滤 应用程序 NET 喜欢 ASP Excel | 更新日期: 2023-09-27 18:34:02

我有一个已经在运行的 asp.net(非MVC(Web表单应用程序。它有一个网格视图。

<asp:GridView ID="gvPendingInvoices" runat="server" AutoGenerateColumns="false" Width="60%" AllowPaging="true" AllowSorting="true"
        CellPadding="4" OnPageIndexChanging="gvPendingInvoices_PageIndexChanging" OnRowDataBound="gvPendingInvoices_RowDataBound">
        <PagerStyle CssClass="gridView_PaggerStyle" HorizontalAlign="Left" />
        <HeaderStyle CssClass="gridView_HeaderStyle" HorizontalAlign="Left" />
        <SelectedRowStyle CssClass="gridView_SelectedRowStyle" />
        <FooterStyle CssClass="gridView_FooterStyle" />
        <PagerStyle HorizontalAlign="Left" />
        <AlternatingRowStyle CssClass="gridView_AlternatingRowStyle" />
        <PagerSettings PageButtonCount="10" Position="TopAndBottom" />
        <RowStyle BorderStyle="None" CssClass="gridView_RowStyle" />
        <Columns>
            <asp:TemplateField HeaderText="ProjectId" Visible="false">
                <ItemTemplate>
                    <asp:Label runat="server" ID="lblProjectId" Text='<%# Bind("ProjectId") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Project" ItemStyle-Width="20%">
                <ItemTemplate>
                    <asp:LinkButton runat="server" ID="lblProject" Text='<%# Bind("ProjectName") %>' OnClick="OnClickProjectName" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Project Manager" ItemStyle-Width="30%">
                <ItemTemplate>
                    <asp:Label runat="server" ID="lblName" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField ItemStyle-HorizontalAlign="Center" ItemStyle-Width="10%">
                <ItemTemplate>
                    <asp:LinkButton runat="server" Text="Notify" ID="lbNotify" OnClick="Notify"></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        <EmptyDataTemplate>
            No Record Found .</EmptyDataTemplate>
    </asp:GridView>

现在我想在此代码中添加类似过滤的 excel...像这样的东西

http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm#demos/jqxgrid/filtering.htm

我已经下载了这个 JQuery,但无法在我的项目中实现它......

还有其他方法可以在我的应用程序中实现过滤吗?

Excel喜欢 ASP.NET 应用程序中的过滤

既然你愿意使用jQuery,我强烈建议DataTables http://datatables.net/。这看起来类似于jqwidgets(但我不知道那个框架(。 我对DataTables的经验是,它非常易于使用,高度可配置,文档齐全且速度快如闪电,用于过滤等。

我也非常喜欢使用 AJAX 更新表的支持,它允许您修改单元格,检测到修改并自动调用自定义页面来执行更新。支持所有 asic Excel 功能,并且扩展性非常强大。

实际上,我很少再在 ASP.NEt 中使用 GridView。 我编写了一些C#代码来生成与DatATables的HtmlTable兼容性。 我在下面编写了方便的扩展方法,该方法将DataTable转换为与DataTables框架兼容的Html。 现在,我可以轻松地对任何数据表利用快速客户端处理。 将方法elow与DataTables文档中的示例之一一起使用应该是直接的。

   public static string ToHtmlTable(this DataTable t,string cssClass="",string id=null,
            bool includeTHead=true,bool includeTBody=true,bool includeFooter=false,string trIDCol=null)
        {
            MemoryStream ms = new MemoryStream();
            XmlWriter x = new XmlTextWriter(ms, Encoding.Default);
            x.WriteStartElement("table");
            x.WriteAttributeString("class", cssClass);
            if (id != null)
            {
                x.WriteAttributeString("id", id);
            }
            x.WriteNewline(); x.WriteNewline();
            if (includeTHead)
            {
                x.WriteStartElement("thead");
            }
            x.WriteStartElement("tr");
            foreach (DataColumn dc in t.Columns)
            {
                x.WriteElementString("th", dc.ColumnName);
            }
            x.WriteEndElement();
            if (includeTHead)
            {
                x.WriteEndElement();
            }
            x.WriteNewline(); 
            x.WriteNewline();
            InsertTableRows(t, x, includeTBody,trIDCol);
            if (includeFooter)
            {
                x.WriteStartElement("tfoot");
                x.WriteStartElement("tr");
                foreach (DataColumn dc in t.Columns)
                {
                    x.WriteElementString("th", dc.ColumnName);
                }
                x.WriteEndElement();
                x.WriteEndElement();
            }

            x.WriteEndElement();
            x.Flush();
            return StreamUtils.StreamToString(ms);
        }