Почему при экспорте GridView отображается пустой лист Excel

<asp:GridView ShowHeaderWhenEmpty="false" AlternatingRowStyle-BackColor="#EBE9E9" AutoGenerateColumns="false" OnSorting="yourTasksGV_Sorting" AllowSorting="true" ID="yourTasksGV" runat="server" ClientIDMode="Static" EmptyDataText="There is no data to display" OnRowDataBound="yourTasksGV_RowDataBound" OnRowCreated="yourTasksGV_RowCreated">
    <Columns>
        <asp:HyperLinkField Target="_blank" DataNavigateUrlFields="Task Detail" DataTextField="Task Name" DataNavigateUrlFormatString="" HeaderText="Task Detail" SortExpression="Task Name" ItemStyle-Width="25%" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Service" HeaderText="Service" SortExpression="Service" ItemStyle-Width="20%" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" ItemStyle-Width="10%" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Due Date" HeaderText="Due Date" SortExpression="Due Date" ItemStyle-Width="15%" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Owner" HeaderText="Owner" SortExpression="Owner" ItemStyle-Width="15%" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Client" HeaderText="Client" SortExpression="Client" ItemStyle-Width="15%" ItemStyle-CssClass="taskTableColumn" />
    </Columns>
</asp:GridView>

у меня есть Export to Excel кнопка со следующим кодом:

protected void btnExport_Click(object sender, EventArgs e)
{
    Response.ClearContent();
    Response.Buffer = true;

    Response.AddHeader("content-disposition", "attachment;filename=yourTaskList.xls");
    Response.Charset = "";
    Response.ContentType = "application/excel";
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);

    yourTasksGV.AllowPaging = false;
    yourTasksGV.DataBind();

    yourTasksGV.HeaderRow.Style.Add("background", "#CCCCCC");

    //Apply style to Individual Cells
    yourTasksGV.HeaderRow.Cells[0].Style.Add("background-color", "#E2E2E2");
    yourTasksGV.HeaderRow.Cells[1].Style.Add("background-color", "#E2E2E2");
    yourTasksGV.HeaderRow.Cells[2].Style.Add("background-color", "#E2E2E2");
    yourTasksGV.HeaderRow.Cells[3].Style.Add("background-color", "#E2E2E2");
    yourTasksGV.HeaderRow.Cells[4].Style.Add("background-color", "#E2E2E2");
    yourTasksGV.HeaderRow.Cells[5].Style.Add("background-color", "#E2E2E2");

    for (int i = 0; i <= 4; i++)
    {
        yourTasksGV.HeaderRow.Cells[i].Style.Add("height", "30px");
    }

    for (int i = 0; i < yourTasksGV.Rows.Count; i++)
    {
        GridViewRow row = yourTasksGV.Rows[i];

        //Change Color back to white
        row.BackColor = System.Drawing.Color.White;

        //Apply text style to each Row
        row.Attributes.Add("class", "textmode");

        //Apply style to Individual Cells of Alternating Row
        if (i % 2 != 0)
        {
            row.Cells[0].Style.Add("background-color", "#C2D69B");
            row.Cells[1].Style.Add("background-color", "#C2D69B");
            row.Cells[2].Style.Add("background-color", "#C2D69B");
            row.Cells[3].Style.Add("background-color", "#C2D69B");
            row.Cells[4].Style.Add("background-color", "#C2D69B");
        }
    }

    yourTasksGV.RenderControl(hw);

    //style to format numbers to string
    string style = @"<style> .textmode { mso-number-format:\@; } </style>";
    Response.Write(style);
    Response.Output.Write(sw.ToString());
    Response.Flush();
    Response.End();
}

мой GridView показывает это:

Когда я экспортирую, это то, что сохраняется:

Почему он сохраняет пустые данные, а не данные, которые отображаются в GridView?

1 ответ

Решение

Вы снова вызываете DataBind внутри btnExport_Click без установки свойства DataSource сетки. Если вы не выключаете ViewState, вам не нужно делать привязку вообще. Просто удали yourTasksGV.DataBind(); в целом.

Другие вопросы по тегам