экспорт GridView в Excel № 2 - PullRequest
1 голос
/ 30 октября 2011

Я привязываю GridView к sqldatasource, а затем при событии _rowcreated выполняю некоторые проверки, и когда строка не соответствует требованиям, я скрываю ее, используя e.Row.Visible = false;

Это прекрасно работает и отображает только правильные строки в сетке. Теперь у меня есть кнопка для экспорта в Excel, и это прекрасно работает, за исключением экспорта также скрытых строк. Я не хочу, чтобы скрытые строки экспортировались.

Есть ли способ, которым я могу сказать, что сетка не должна добавлять эту строку вместо того, чтобы скрывать ее? Есть ли простой способ удалить все скрытые строки перед запуском экспорта? Могу ли я не добавлять скрытые строки во время экспорта? Как вы можете видеть из приведенного ниже кода, я попытался сделать это, но он не распознает, видима строка или нет.

Код экспорта:

 public static void Export(string fileName, GridView gv)
{
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.AddHeader(
        "content-disposition", string.Format("attachment; filename={0}", fileName));
    HttpContext.Current.Response.ContentType = "application/ms-excel";

    using (StringWriter sw = new StringWriter())
    {
        using (HtmlTextWriter htw = new HtmlTextWriter(sw))
        {
            //  Create a form to contain the grid
            Table table = new Table();

            gv.GridLines = GridLines.Both;
            table.GridLines = gv.GridLines;
            //table.BackColor = Color.Yellow;



            //  add the header row to the table
            if (gv.HeaderRow != null)
            {
                GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
                table.Rows.Add(gv.HeaderRow);

                //color the header
                table.Rows[0].BackColor = gv.HeaderStyle.BackColor;
                table.Rows[0].ForeColor = gv.HeaderStyle.ForeColor;
            }

            //  add each of the data rows to the table
            foreach (GridViewRow row in gv.Rows)
            {

                if (row.Visible == true)
                {
                    GridViewExportUtil.PrepareControlForExport(row);
                    table.Rows.Add(row);
                }
            }

            //  color the rows
            bool altColor = false;
            for (int i = 1; i < table.Rows.Count; i++)
            {
                if (!altColor)
                {
                    table.Rows[i].BackColor = gv.RowStyle.BackColor;
                    altColor = true;
                }
                else
                {
                    table.Rows[i].BackColor = gv.AlternatingRowStyle.BackColor;
                    altColor = false;
                }
            }

            //  render the table into the htmlwriter
            table.RenderControl(htw);

            //  render the htmlwriter into the response
            HttpContext.Current.Response.Write(sw.ToString());
            HttpContext.Current.Response.End();
        }
    }
}

Ответы [ 3 ]

1 голос
/ 30 октября 2011

Вот простая реализация для экспорта GridView в Excel:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient; 

public partial class ExportGridView : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Clear();

        Response.AddHeader("content-disposition", "attachment;
        filename=FileName.xls");

        Response.Charset = "";

        // If you want the option to open the Excel file without saving than

        // comment out the line below

        // Response.Cache.SetCacheability(HttpCacheability.NoCache);

        Response.ContentType = "application/vnd.xls";

        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();

    }
}

Справочный блог

1 голос
/ 10 марта 2014

Во-первых, почему у вас есть скрытые строки из вашего вида сетки?Получайте только те данные, которые вы хотели.И используйте этот метод для экспорта;

void ExportToExcel(GridView grdData, string filename)
{
    grdData.BorderStyle = BorderStyle.Solid;
    grdData.BorderWidth = 1;
    grdData.BackColor = Color.WhiteSmoke;
    grdData.GridLines = GridLines.Both;
    grdData.Font.Name = "Verdana";
    grdData.Font.Size = FontUnit.XXSmall;
    grdData.HeaderStyle.BackColor = Color.DimGray;
    grdData.HeaderStyle.ForeColor = Color.White;
    grdData.RowStyle.HorizontalAlign = HorizontalAlign.Left;
    grdData.RowStyle.VerticalAlign = VerticalAlign.Top;

    HttpResponse response = HttpContext.Current.Response;
    response.Clear();
    response.Charset = "";
    response.ContentType = "application/vnd.ms-excel";
    response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename+ "\"");

    using (var sw = new StringWriter())
    {
        using (var htw = new HtmlTextWriter(sw))
        {
            grdData.RenderControl(htw);
            response.Write(sw.ToString());
            response.End();
        }
    }
} 
1 голос
/ 30 октября 2011

http://mattberseth.com/blog/2007/04/export_gridview_to_excel_1.html

Я никогда не использовал GridViewExportUtil, но почему бы не редактировать его код?

private static void PrepareControlForExport(Control control)
{
    for (int i = 0; i < control.Controls.Count; i++)
    {
        Control current = control.Controls[i];

        //-----------------------------
        // * my addition
        if (!current.Visible) continue;
        //-----------------------------

        if (current is LinkButton)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
        }
        else if (current is ImageButton)
        {
            //...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...