3

私のウェブサイトから、メソッドを呼び出してレポートを生成するボタンがあります。コードは機能します。問題は、コードがすべてのグリッドビュー (3 つある) を同じタブに表示することです。ボタンをクリックするとドキュメントがダウンロードされますが、各グリッドビューが個別のタブに表示されるように、これにどのコードを追加できますか。タブ名は、トップ 1、トップ 2、およびトップ 3 になります。明確にするために、現在、すべてのグリッドビューがトップ 1 タブに表示されているため、さらに 2 つのタブ (トップ 2 およびトップ 3) を作成し、gridview2 を配置する必要があります。上部 2 タブに、上部 3 タブに gridview3 があります。

using System;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Text;
using System.IO;



public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
    DataSet dataSet = new DataSet();

    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ISALog1ConnectionString"].ToString());

    SqlCommand cmd = new SqlCommand("exec ProxyReport", conn);
    cmd.CommandTimeout = 200;

    SqlDataAdapter ad = new SqlDataAdapter(cmd);
    ad.Fill(dataSet);

    GridView1.DataSource = dataSet.Tables[0];
    GridView1.DataBind();
    GridView2.DataSource = dataSet.Tables[1];
    GridView2.DataBind();
    GridView3.DataSource = dataSet.Tables[2];
    GridView3.DataBind();

}
protected void Button1_Click(object sender, EventArgs e)
{
    string attachment = "attachment; filename=Top 1.xls";
    Response.ClearContent();
    Response.AddHeader("content-disposition", attachment);
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = "application/ms-excel";
    StringWriter sw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);
    GridView1.RenderControl(htw);
    GridView2.RenderControl(htw);
    GridView3.RenderControl(htw);
    Response.Write(sw.ToString());
    Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{

}


}
4

1 に答える 1

3

はい、コードプレックスからEPPlusを追加する必要があります:http://epplus.codeplex.com/そして これをコードに追加します。これを使用して、必要な数のワークシートを追加できます。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;
    using System.IO;
    using OfficeOpenXml;
    using System.Configuration;

    public partial class _Default : System.Web.UI.Page
    {
protected void Page_Load(object sender, EventArgs e)
{

}

protected void Button1_Click(object sender, EventArgs e)
{
    GetExcel ge = new GetExcel();
    ge.ProcessRequest(HttpContext.Current);
}

public class GetExcel : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        DataSet dataSet = new DataSet();

        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ISALog1ConnectionString"].ToString());
        SqlCommand cmd = new SqlCommand("exec ProxyReport", conn);
        cmd.CommandTimeout = 200;
        SqlDataAdapter ad = new SqlDataAdapter(cmd);
        ad.Fill(dataSet);

       GridView1.DataSource = dataSet.Tables[0];
       GridView1.DataBind();
       GridView2.DataSource = dataSet.Tables[1];
       GridView2.DataBind();
       GridView3.DataSource = dataSet.Tables[2];
       GridView3.DataBind();   

        dataSet.Tables[0].TableName = "1";
        dataSet.Tables[1].TableName = "2";
        dataSet.Tables[2].TableName = "3";

        int count = 3;   

            MemoryStream ms = GetExcel.DataTableToExcelXlsx(dataSet, count);
            ms.WriteTo(context.Response.OutputStream);
            context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            context.Response.AddHeader("Content-Disposition", "attachment;filename=EPPlusData.xlsx");
            context.Response.StatusCode = 200;
            context.Response.End();

    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

    public static MemoryStream DataTableToExcelXlsx(DataSet ds, int count)
    {
        MemoryStream Result = new MemoryStream();
        ExcelPackage pack = new ExcelPackage();

        for (int i = 1; i <= count; i++)
        {
            DataTable table = ds.Tables[i.ToString()];
            ExcelWorksheet ws = pack.Workbook.Worksheets.Add("MySheet" + i.ToString());

            int col = 1;
            int row = 1;

            foreach (DataColumn cl in table.Columns)
            {
                ws.Cells[row, col].Value = cl.ColumnName;
                col++;
            }
            col = 1;
            foreach (DataRow rw in table.Rows)
            {
                foreach (DataColumn cl in table.Columns)
                {
                    if (rw[cl.ColumnName] != DBNull.Value)
                        ws.Cells[row + 1, col].Value = rw[cl.ColumnName].ToString();
                    col++;
                }
                row++;
                col = 1;
            }
        }
        pack.SaveAs(Result);
        return Result;
    }
}}
于 2012-07-05T20:08:19.650 に答える