【问题标题】:Exporting Excel is giving error on button click导出 Excel 在按钮单击时出错
【发布时间】:2015-02-05 07:14:04
【问题描述】:

我正在实现在按钮单击时保存在 gridview 中的数据应该在按钮单击时导出的功能,我从here 实现了该功能。

但我收到错误,因为 “GridView”类型的控件“mainContent_grdTeacherProfile”必须放在带有 runat=server 的表单标签内

grdTeacherProfile.RenderControl(hw);

请看gridview的asps代码:-

<asp:GridView ID="grdTeacherProfile"
                runat="server"
                Width="100%"
                border="1" Style="border: 1px solid #E5E5E5;"
                CellPadding="3" FooterStyle-BackColor="#e3e3e3"
                AutoGenerateColumns="false"
                AllowPaging="true"
                CssClass="hoverTable"
                DataKeyNames="Id"
                PageSize="4"
                ShowFooter="false"
                OnPreRender="PreRenderGrid"
                HeaderStyle-CssClass="k-grid td"
                OnDataBound="grdTeacherProfile_DataBound"
                OnPageIndexChanging="grdTeacherProfile_PageIndexChanging"
                OnRowDeleting="grdTeacherProfile_RowDeleting"
                OnRowCommand="grdTeacherProfile_RowCommand"
                EnableSortingAndPagingCallbacks="false"
                EmptyDataText="No records found">
                <AlternatingRowStyle CssClass="k-alt" />
                <Columns>
                    <asp:TemplateField HeaderText="Select" ItemStyle-Width="5" >
                        <ItemTemplate>
                            <asp:CheckBox ID="chkDelete" runat="server" onClick="Check_Click(this)" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="first_name" HeaderText="First Name" ItemStyle-Width="30"  />
                    <asp:BoundField DataField="last_name" HeaderText="Last Name" ItemStyle-Width="30" />
                    <asp:BoundField DataField="dob" HeaderText="Date of Birth" ItemStyle-Width="20"  ApplyFormatInEditMode="true" DataFormatString="{0:d}" />
                    <asp:BoundField DataField="gender" HeaderText="Gender" ItemStyle-Width="20"  />
                    <asp:BoundField DataField="designation" HeaderText="Designation" ItemStyle-Width="20" />
                    <asp:BoundField DataField="joining_date" HeaderText="Joining Date" ItemStyle-Width="20"  ApplyFormatInEditMode="true" DataFormatString="{0:d}" />
                    <asp:BoundField DataField="leaving_date" HeaderText="Leaving Date" ItemStyle-Width="20"  ApplyFormatInEditMode="true" DataFormatString="{0:d}" />
                    <asp:BoundField DataField="active" HeaderText="Active" ItemStyle-Width="25" />
                    <asp:TemplateField HeaderText="Action" HeaderStyle-Width="5%">
                        <ItemTemplate>
                            <asp:ImageButton ID="btnEdit" AlternateText="Edit" ImageUrl="~/images/edit.png" runat="server" Width="15" Height="15" CommandName="eEdit" CommandArgument='<%# Eval("Id") %>' CausesValidation="false" />
                            <asp:ImageButton ID="btnDelete" AlternateText="Delete" ImageUrl="~/images/delete.png" runat="server" Width="15" Height="15" CommandName="Delete" CommandArgument='<%# Eval("Id") %>' CausesValidation="false" OnClientClick="return confirm('Are you sure you want to delete this record?')" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
                <PagerStyle ForeColor="#e3e3e3"
                    BackColor="#e3e3e3" CssClass="grid-pagi" />
                <PagerTemplate>
                <table runat="server" id="testTable1" style="width: 100%" class="hoverTable_tbl">
                    <tr>
                        <td class="col-md-4 pull-left">
                            <asp:Label ID="MessageLabel"
                                Text="Select a page:"
                                runat="server" />
                            <asp:LinkButton ID="FirstLB" runat="server" CommandName="Page" CommandArgument="First" ToolTip="First" CssClass="btn-pager btn-default"><<</asp:LinkButton>
                            <asp:LinkButton ID="PrevLB" runat="server" CommandName="Page" CommandArgument="Prev" ToolTip="Previous" CssClass="btn-pager btn-default"><</asp:LinkButton>
                            <asp:DropDownList runat="server" ID="PageDropDownList" AutoPostBack="true" EnableViewState="true" OnSelectedIndexChanged="PageDropDownList_SelectedIndexChanged" CssClass="selectpicker form-control-drp"></asp:DropDownList>

                            <asp:LinkButton ID="NextLB" runat="server" CommandName="Page" CommandArgument="Next" ToolTip="Next" CssClass="btn-pager btn-default">></asp:LinkButton>
                            <asp:LinkButton ID="LastLB" runat="server" CommandName="Page" CommandArgument="Last" ToolTip="Last" CssClass="btn-pager btn-default">>></asp:LinkButton>
                        </td>
                        <td class="col-md-3">
                            <div>
                            <div class="pull-left"><asp:Label ID="PageSizeLabel" CssClass="page-size" runat="server" Text="Select Page Size: "></asp:Label>
                                <asp:DropDownList ID="ddlPageSize" runat="server" OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged" AutoPostBack="true" CssClass="selectpicker form-control-drp">
                                <%-- <asp:ListItem Value="0" Text="0" />--%>
                                <asp:ListItem Value="1" Text="1" />
                                <asp:ListItem Value="2" Text="2" />
                                <asp:ListItem Value="3" Text="3" />
                            </asp:DropDownList>
                            </div>
                            <div> 
                                 <asp:Label ID="CurrentPageLabel" CssClass="view" runat="server" />
                            </div>
                        </div>
                        </td>
                    </tr>
                </table>
            </PagerTemplate>

                <RowStyle />
            </asp:GridView>

【问题讨论】:

    标签: asp.net excel gridview


    【解决方案1】:

    使用 iTextSharp 之类的第 3 方可以更轻松地将 GridView 导出到 Excel。

    如果你想知道我是如何让它工作的,你可以查看这个示例代码:

    http://dotnetfrommanila.blogspot.com/2013/04/convert-gridview-to-excel-in-c.html

    希望对你有帮助。

    【讨论】:

    • 我的 VS 中没有得到namespace,为什么喜欢using iTextSharp.text.pdf; using iTextSharp.text.html.simpleparser;
    • 您需要在您的应用程序中添加 iTextSharp。如果你安装了 NuGet,在 VS 中,只需转到 Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution,然后搜索 iTextSharp
    • 我安装了iTextSharp,现在我该怎么办??
    • 我收到Cells canno be used as Method 的错误。在grdTeacherProfile.HeaderRow.Cells(0).Style.Add("background-color", "yellow");
    【解决方案2】:

    我自己搞定的,

    其实我忘了添加下面的代码和EnableEventValidation="false"

    代码是:-

    public override void VerifyRenderingInServerForm(Control control)
        {
            /* Verifies that the control is rendered */
        }
    

    它成功了。!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-30
      • 2018-05-07
      • 2015-12-28
      • 2017-02-16
      • 1970-01-01
      • 2014-11-12
      • 2014-07-22
      • 2016-07-15
      相关资源
      最近更新 更多