如何从 ASPX 页面中删除 Gridview?
How to remove a Gridview from an ASPX page?
我有一个显示 GridView 的 Aspx 页面。 gridview 将显示数据,这些数据取决于从下拉菜单中选择的类别。用户可以选择将其下载为 CSV 文件(导出为 CSV)。我现在不希望 Gridview 出现(因为它太大以至于经常挂起)而是能够从 gridview 下载包含数据的 CSV 文件。我已经成功构建了允许通过单击按钮下载此数据的按钮。但是,我现在无法在没有出现 gridView 的情况下打开页面。我试图注释掉 Gridview 代码 - 这只是破坏了页面。我试图将 gridview 设置为 Visible="False" 但这也不起作用。我还能做些什么来防止 gridview 出现以及用户被直接带到下载对话框?
您可以从 Code Behind 将数据加载到 DataSet 或 DataTable 中,然后将其直接导出到 Excel/CSV 而无需将其分配给 GridView,例如在以下示例中将其导出到 Excel:
Public Sub ExportToExcel(dt As DataTable)
If dt.Rows.Count > 0 Then
Dim tw As New System.IO.StringWriter()
Dim hw As New System.Web.UI.HtmlTextWriter(tw)
Dim dgGrid As New DataGrid()
dgGrid.DataSource = dt
dgGrid.DataBind()
'Get the HTML for the control.
dgGrid.RenderControl(hw)
'Write the HTML back to the browser.
Response.ContentType = "application/vnd.ms-excel"
Response.AppendHeader("Content-Disposition", "attachment; filename=Data.xls")
Me.EnableViewState = False
Response.Write(tw.ToString())
Response.[End]()
End If
End Sub
如果您遇到类似 control must be placed inside of form tag 的错误,您可能还需要将以下代码放入后端(参考:export-data-to-excel-from-datatable-gridview-aspnet-csharp)
Public Sub VerifyRenderingInServerForm(control As Control)
' Verifies that the control is rendered
End Sub
以上代码的C#版本:
public void ExportToExcel(DataTable dt)
{
if (dt.Rows.Count > 0) {
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
DataGrid dgGrid = new DataGrid();
dgGrid.DataSource = dt;
dgGrid.DataBind();
//Get the HTML for the control.
dgGrid.RenderControl(hw);
//Write the HTML back to the browser.
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("Content-Disposition", "attachment; filename=Data.xls");
this.EnableViewState = false;
Response.Write(tw.ToString());
Response.End();
}
}
public void VerifyRenderingInServerForm(Control control)
{
// Verifies that the control is rendered
}
将您的 Gridview
包装成 div
并在 asp.net 代码中将其设置为 display:none
–
例如:<div id="divhidegrid" runat="server" style="display:none;" > <asp:GridView ID="gvtest" runat="server" > </div>
像这样
我有一个显示 GridView 的 Aspx 页面。 gridview 将显示数据,这些数据取决于从下拉菜单中选择的类别。用户可以选择将其下载为 CSV 文件(导出为 CSV)。我现在不希望 Gridview 出现(因为它太大以至于经常挂起)而是能够从 gridview 下载包含数据的 CSV 文件。我已经成功构建了允许通过单击按钮下载此数据的按钮。但是,我现在无法在没有出现 gridView 的情况下打开页面。我试图注释掉 Gridview 代码 - 这只是破坏了页面。我试图将 gridview 设置为 Visible="False" 但这也不起作用。我还能做些什么来防止 gridview 出现以及用户被直接带到下载对话框?
您可以从 Code Behind 将数据加载到 DataSet 或 DataTable 中,然后将其直接导出到 Excel/CSV 而无需将其分配给 GridView,例如在以下示例中将其导出到 Excel:
Public Sub ExportToExcel(dt As DataTable)
If dt.Rows.Count > 0 Then
Dim tw As New System.IO.StringWriter()
Dim hw As New System.Web.UI.HtmlTextWriter(tw)
Dim dgGrid As New DataGrid()
dgGrid.DataSource = dt
dgGrid.DataBind()
'Get the HTML for the control.
dgGrid.RenderControl(hw)
'Write the HTML back to the browser.
Response.ContentType = "application/vnd.ms-excel"
Response.AppendHeader("Content-Disposition", "attachment; filename=Data.xls")
Me.EnableViewState = False
Response.Write(tw.ToString())
Response.[End]()
End If
End Sub
如果您遇到类似 control must be placed inside of form tag 的错误,您可能还需要将以下代码放入后端(参考:export-data-to-excel-from-datatable-gridview-aspnet-csharp)
Public Sub VerifyRenderingInServerForm(control As Control)
' Verifies that the control is rendered
End Sub
以上代码的C#版本:
public void ExportToExcel(DataTable dt)
{
if (dt.Rows.Count > 0) {
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
DataGrid dgGrid = new DataGrid();
dgGrid.DataSource = dt;
dgGrid.DataBind();
//Get the HTML for the control.
dgGrid.RenderControl(hw);
//Write the HTML back to the browser.
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("Content-Disposition", "attachment; filename=Data.xls");
this.EnableViewState = false;
Response.Write(tw.ToString());
Response.End();
}
}
public void VerifyRenderingInServerForm(Control control)
{
// Verifies that the control is rendered
}
将您的 Gridview
包装成 div
并在 asp.net 代码中将其设置为 display:none
–
例如:<div id="divhidegrid" runat="server" style="display:none;" > <asp:GridView ID="gvtest" runat="server" > </div>
像这样