Excel にエクスポートされたチェックボックスが多い Gridview に関する問題のトラブルシューティングを行っています (以下のサンプル コード。実際のコードにはさらに多くのチェックボックスが含まれています)。1) ユーザーがボタンをクリックしてエクスポート プロセスを開始し、次に 2) ユーザーがファイルをデスクトップに保存またはダウンロードし、3) 基本セル (> 15) をレンダリングするのにかなりの時間がかかります。数秒)、基本的な Excel ファイルがレンダリングされると、3) スプレッドシートがチェックボックスをレンダリングし (レンダリング時間は、コンピューターの速度に応じて 3 分から 10 分かかります)、GridView に表示されるようにチェックボックスが表示されるまでハングしているように見えます。
また、このサンプル ファイルは約 800k であり、他の大きなグリッドビューをチェックボックスなしでほぼ瞬時に Excel にエクスポートできたことにも注意してください。
Web ページから実際にエクスポートされたファイルは、スプレッドシート/ワークブックとして保存するまで、Excel ファイルではありません。ただし、チェックボックスを含むグリッドビューが「スプレッドシート」としてレンダリングするのに非常に時間がかかるのは少し奇妙に思えます。
私の質問はこれです-チェックボックスが多いExcelスプレッドシートをエクスポートするためのこの通常の動作ですか、またはExcelスプレッドシートが開いているときに長時間ハングしないように以下のコードを改善できる方法はありますか? チェックボックスのレンダリング時間を短縮するのに役立つ他のソリューションはありますか?
aspx コード
<%@ Page Title="Test Page" Language="C#" MasterPageFile="~/Site.master" EnableEventValidation="false" AutoEventWireup="true" CodeFile="form2.aspx.cs" Inherits="form2" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server"></asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="FeaturedContent" Runat="Server"></asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" Runat="Server">
<asp:Button ID="Button1" runat="server" Height="38px" OnClick="Button1_CLick" Text="Export to Excel" Width="200px" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:BoundField DataField="Field 1" HeaderText="Field 1" SortExpression="Field 1" />
<asp:BoundField DataField="Field 2" HeaderText="Field 2" SortExpression="Field 2" />
<asp:BoundField DataField="Field 3" HeaderText="Field 3" SortExpression="Field 3" />
<asp:BoundField DataField="Field 4" HeaderText="Field 4" SortExpression="Field 4" />
<asp:BoundField DataField="Field 5" HeaderText="Field 5" SortExpression="Field 5" />
<asp:BoundField DataField="Field 6" HeaderText="Field 6" SortExpression="Field 6" />
<asp:BoundField DataField="Field 7" HeaderText="Field 7" SortExpression="Field 7" />
<asp:BoundField DataField="Field 8" HeaderText="Field 8" SortExpression="Field 8" />
<asp:BoundField DataField="Field 9" HeaderText="Field 9" SortExpression="Field 9" />
<asp:Panel ID="pnlClick" runat="server" CssClass="collapsiblepanelCSS">
<div style="background-color:blue;height:30px; vertical-align: middle">
<div style="float: left;color:white;padding: 5px 5px 0 0 ">
Server List Collapsable Panel
</div>
<div style="float: right; color: white; padding: 5px 5px 0 0" id="divshow">
<asp:Label ID="lblMessage" runat="server" Text="Label" />
</div>
<div style="clear:both">
</div>
</div>
</asp:Panel>
<asp:Panel ID="pnlCollapsable" runat="server" Height="0" CssClass="collapsiblepanelCSS">
<asp:CheckBoxField DataField="Check Box 1" HeaderText="Check Box 1" SortExpression="Check Box 1" />
<asp:CheckBoxField DataField="Check Box 2" HeaderText="Check Box 2" SortExpression="Check Box 2" />
<asp:CheckBoxField DataField="Check Box 3" HeaderText="Check Box 3" SortExpression="Check Box 3" />
<asp:CheckBoxField DataField="Check Box 4" HeaderText="Check Box 4" SortExpression="Check Box 4" />
<asp:CheckBoxField DataField="Check Box 5" HeaderText="Check Box 5" SortExpression="Check Box 5" />
<asp:CheckBoxField DataField="Check Box 6" HeaderText="Check Box 6" SortExpression="Check Box 6" />
<asp:CheckBoxField DataField="Check Box 7" HeaderText="Check Box 7" SortExpression="Check Box 7" />
<asp:CheckBoxField DataField="Check Box 8" HeaderText="Check Box 8" SortExpression="Check Box 8" />
<asp:CheckBoxField DataField="Check Box 9" HeaderText="Check Box 9" SortExpression="Check Box 9" />
<asp:CheckBoxField DataField="Check Box 10" HeaderText="Check Box 10" SortExpression="Check Box 10" />
<asp:CheckBoxField DataField="Check Box 11" HeaderText="Check Box 11" SortExpression="Check Box 11" />
<asp:CheckBoxField DataField="Check Box 12" HeaderText="Check Box 12" SortExpression="Check Box 12" />
</asp:Panel>
<CC1:CollapsiblePanelExtender ID="CollapsiblePanelExtender1" Collapsed="true" ExpandControlID="pnlClick" TextLabelID="lblMessage" CollapsedText="Click To Show" ExpandedText="Click To Hide" ImageControlID="imgArrows" ExpandDirection="Vertical" TargetControlID="pnlCollapsable" ScrollContents="false" runat="server"></CC1:CollapsiblePanelExtender>
<asp:BoundField DataField="Field 10" HeaderText="Field 10" SortExpression="Field 10" />
<asp:BoundField DataField="Field 11" HeaderText="Field 11" SortExpression="Field 11" />
<asp:BoundField DataField="Field 12" HeaderText="Field 12" SortExpression="Field 12" />
<asp:CommandField ShowEditButton="True" />
</Columns>
<EditRowStyle BackColor="#2461BF" />
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#EFF3FB" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F5F7FB" />
<SortedAscendingHeaderStyle BackColor="#6D95E1" />
<SortedDescendingCellStyle BackColor="#E9EBEF" />
<SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>
<sql connection strings, insert/update SQL code, update parameters, and closing ASP/HTML tags>
csファイル
using System;
using System.Configuration;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class form2 : system.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
public override void VerifyRenderingInServerForm(Control control)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Clear();
Response.AddHeader("content-disposition", "attachement;filename=FileNAme.xls");
Response.ContentType = "application/vnd.xlsx";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
GridView1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}
}