0

Gridviewデータを Excel シートにエクスポートするには、次の 3 つのオプションがあります。

  1. 現在のページ
  2. すべてのページ
  3. トップ100行

それは現在の意志でうまくいきましたが、他のオプションはうまくいきませんでした。

コード:

protected void btnExportGrid_Click(object sender, EventArgs e)
{
    Table table = new Table
    {
        GridLines = this.gv_RquestedOrdres.GridLines
    };
    if (this.rdoBtnListExportOptions.SelectedIndex == 1)
    {
        this.gv_RquestedOrdres.AllowPaging = false;
        this.gv_RquestedOrdres.DataBind();
    }
    else if (this.rdoBtnListExportOptions.SelectedIndex == 2)
    {
        this.gv_RquestedOrdres.PageSize = 100;
        this.gv_RquestedOrdres.DataBind();
    }
    GridViewExportUtil.Export("Orders.xls", this.gv_RquestedOrdres);
}

private string Gridview(Panel gv)
{
    StringBuilder sb = new StringBuilder();
    StringWriter sw = new StringWriter(sb);
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    gv.RenderControl(hw);
    return sb.ToString();

}

GridViewExportUtil クラス:

public class GridViewExportUtil
{
    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";
        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Unicode;
        HttpContext.Current.Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());
        using (StringWriter writer = new StringWriter())
        {
            using (HtmlTextWriter writer2 = new HtmlTextWriter(writer))
            {
                Table table = new Table();
                if (gv.HeaderRow != null)
                {
                    PrepareControlForExport(gv.HeaderRow);
                    table.Rows.Add(gv.HeaderRow);
                }
                foreach (GridViewRow row in gv.Rows)
                {
                    PrepareControlForExport(row);
                    table.Rows.Add(row);
                }
                if (gv.FooterRow != null)
                {
                    PrepareControlForExport(gv.FooterRow);
                    table.Rows.Add(gv.FooterRow);
                }
                table.RenderControl(writer2);
                HttpContext.Current.Response.Write(writer.ToString());
                HttpContext.Current.Response.End();
            }
        }
    }

    private static void PrepareControlForExport(Control control)
    {
        for (int i = 0; i < control.Controls.Count; i++)
        {
            Control control2 = control.Controls[i];
            if (control2 is LinkButton)
            {
                control.Controls.Remove(control2);
                control.Controls.AddAt(i, new LiteralControl((control2 as LinkButton).Text));
            }
            else if (control2 is ImageButton)
            {
                control.Controls.Remove(control2);
                control.Controls.AddAt(i, new LiteralControl((control2 as ImageButton).AlternateText));
            }
            else if (control2 is HyperLink)
            {
                control.Controls.Remove(control2);
                control.Controls.AddAt(i, new LiteralControl((control2 as HyperLink).Text));
            }
            else if (control2 is DropDownList)
            {
                control.Controls.Remove(control2);
                control.Controls.AddAt(i, new LiteralControl((control2 as DropDownList).SelectedItem.Text));
            }
            else if (control2 is CheckBox)
            {
                control.Controls.Remove(control2);
                control.Controls.AddAt(i, new LiteralControl((control2 as CheckBox).Checked ? "True" : "False"));
            }
            if (control2.HasControls())
            {
                PrepareControlForExport(control2);
            }
        }
    }
}
4

1 に答える 1

0

データのエクスポートにグリッド ビューを使用しています。これは、グリッド ビューの現在のページがエクスポートされた html にレンダリングされることを意味するだけです。完全なデータ (または上位 100 行) をレンダリングするには、それに応じてページ サイズを設定します。したがって、ページ インデックスが 1 のページ サイズが 100 行の場合、上位 100 行のエクスポートが提供されますが、ページングを無効にすると、すべてのページが提供されます。エクスポートが終了したら、ページングを元に戻します。

さらに別の方法は、実際のデータ (gird にバインドしたもの) を使用して CSV エクスポート (Excel で開くことができます) を行うことです (または、and を使用して html エクスポートをTable行いRowますが、グリッドビュー行を使用する代わりに、データを使用してセルを追加します)。 html にRow)

于 2013-01-15T10:17:31.393 に答える