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

时间:2014-12-12 12:24:42

标签: c# jquery asp.net excel gridview

我已经运行了一个asp.net(非MVC)Web表单应用程序。 它有一个gridview。

<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但无法在我的项目中实现此功能......

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

1 个答案:

答案 0 :(得分:1)

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

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

我实际上很少在ASP.NEt中使用GridView。我写了一些C#代码来生成与DatATables的HtmlTable兼容。我在下面写了一个方便的扩展方法,它将DataTable转换为与DataTables框架兼容的Html。现在,我可以轻松地为任何DataTable利用快速客户端处理。应该直接使用方法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);
        }