0

gridview から Excel へのエクスポートに関する詳細な手順が記載された質問がたくさんあることは知っていますが、特定の状況が見つかりません。

検索から 5 つのフィールドを持つレコードを表示するグリッドビューがあります。ユーザーはチェックボックスで任意の数のレコードをチェックできます。ボタンをクリックすると、チェックされたレコードのみを Excel に正常にエクスポートできます。エクスポートは HTML です。ここで Matt Berseth の手法を使用しています: http://mattberseth.com/blog/2007/04/export_gridview_to_excel_1.html

レコードがユーザーによってチェックされたかどうかのチェックを追加しましたが、これは正常に機能します。

しかし、エクスポートされるチェック済みレコードについて、ユーザーがレコード全体 (つまり、選択されたレコードのみのすべてのフィールド) を見たいという要件があります。

これを達成するための良い戦略は何ですか?

グリッドビューのすべてのフィールドを取得し、5 つの必要なフィールドを除くすべてを非表示に設定しようとしました。次に、エクスポート ボタンのクリック イベントで、フィールドを表示および再バインドに設定します。そこには運がありません。

助けてくれてありがとう。

4

1 に答える 1

0

チェックされている行を確認するには、行をループする必要があるようです。

foreach (GridViewRow row in gridView.Rows) 
{
    if(row.RowType == DataControlRowType.DataRow)
    {
      CheckBox cb = row.FindControl("CheckBoxID") as CheckBox;

      if(cb != null && cb.Checked) 
      {
        // Logic here.
      }
}

そこから、必要に応じて、いくつかの異なるメカニズムを使用して Excel にエクスポートできます。xls ファイルだけが必要な場合に私が過去に使用したのは NPOI です。これはオープン ソースであり、適切なフレームワークを提供します。彼らのサイトへのリンクは次のとおりです。

http://npoi.codeplex.com/

- 編集

あなたのコメントを読んだ後、これが役立つかもしれません。

ASPX コード:

    <asp:GridView ID="gridView" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:TemplateField HeaderText="Checkbox Column">
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBoxID" runat="server" />
                </ItemTemplate>
            </asp:TemplateField> 
            <asp:TemplateField HeaderText="Visible Column">
                <ItemTemplate>
                    <asp:Label ID="lblVisibleColumn"  runat="server" Text='<%# Eval("VisibleColumn")%>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField> 
            <asp:TemplateField HeaderText="Hidden Column" Visible="false">
                <ItemTemplate>
                    <asp:Label ID="lblHiddenColumn"  runat="server" Text='<%# Eval("HiddenColumn")%>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField> 
        </Columns>
    </asp:GridView>

    <asp:Button ID="btnExport" runat="server" Text="Export" OnClick="btnExport_Click" />

バックエンド コード:

        public class MyDataColumn
        {
            public string visibleColumn { get; set; }
            public string hiddenColumn { get; set; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataTable dataTable = new DataTable();
                List<MyDataColumn> dataColumns = new List<MyDataColumn>();

                for (int i = 0; i < 10; i++)
                {
                    dataColumns.Add(new MyDataColumn()
                    {
                        visibleColumn = string.Format("Visible Column {0}", i),
                        hiddenColumn = string.Format("Hidden Column {0}", i)
                    });
                }

                gridView.DataSource = dataColumns;
                gridView.DataBind();
            }
        }

        protected void btnExport_Click(object sender, EventArgs e)
        {
            List<MyDataColumn> dataColumnsToExport = new List<MyDataColumn>();

            foreach (GridViewRow row in gridView.Rows) 
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    CheckBox cb = row.FindControl("CheckBoxID") as CheckBox;

                    if (cb != null && cb.Checked)
                    {
                        Label lblVisibleColumn = row.FindControl("lblVisibleColumn") as Label;
                        Label lblHiddenColumn = row.FindControl("lblHiddenColumn") as Label;

                        dataColumnsToExport.Add(new MyDataColumn()
                        {
                            visibleColumn = lblVisibleColumn.Text,
                            hiddenColumn = lblHiddenColumn.Text
                        });
                    }
                }
            }

            GridView gridViewToExport = new GridView();
            gridViewToExport.DataSource = dataColumnsToExport;
            gridViewToExport.DataBind();

            //Do Something With gridViewToExport
            //GridViewExportUtil.Export("GridView.xls", gridViewToExport);
        }

これは、必要に応じて簡単に DataTable に変換できるはずです。独自のクラスを使用してコードを短くしました。

于 2013-01-07T21:06:06.770 に答える