3

Excel にエクスポートする必要があるグリッドビューがあります。行からチェックボックスを削除できましたが、ヘッダーから削除する方法とチェックボックス列を完全に削除する方法がわかりません。手伝ってくれてありがとう。

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="Id">
    <Columns>
        <asp:TemplateField HeaderText="Select" >
            <HeaderTemplate>
                <input id="chkAll" onclick="checkAll(this);" runat="server" type="checkbox" />
            </HeaderTemplate>
            <ItemTemplate>
            <asp:CheckBox  ID="CheckBox1" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Event" HeaderText="Event" SortExpression="Event" />
        <asp:BoundField DataField="Event_Description" HeaderText="Event_Description" SortExpression="Event_Description" />
        <asp:BoundField DataField="Start_Date" HeaderText="Start_Date" SortExpression="Start_Date" />
    </Columns>
    </asp:GridView>

Excel にエクスポートするバックエンド C# コードを次に示します。

protected void download_Click(object sender, EventArgs e)
{
    PrepareGridViewForExport(GridView1);
    Response.ClearContent(); 
    Response.AddHeader("content-disposition", "attachment; filename=GridViewToExcel.xls"); 
    Response.ContentType = "application/excel"; 
    StringWriter sWriter = new StringWriter();
    HtmlTextWriter hTextWriter = new HtmlTextWriter(sWriter);
    GridView1.RenderControl(hTextWriter);
    Response.Write(sWriter.ToString());
    Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
}
private void PrepareGridViewForExport(Control gv)
{
    Literal l = new Literal();
    string name = String.Empty;
    for (int i = 0; i < gv.Controls.Count; i++)
    {
        if (gv.Controls[i].GetType() == typeof(CheckBox))
        {
            gv.Controls.Remove(gv.Controls[i]);
            gv.Controls.AddAt(i, l);
        }
        if (gv.Controls[i].HasControls())
        {
            PrepareGridViewForExport(gv.Controls[i]);
        }
    }
}
4

2 に答える 2

5

不要な列、つまり行の列0を非表示にするこのエクスポート機能を試してください...

protected void btnExportExcel_Click(object sender, EventArgs e)
{
    Response.Clear();
    Response.Buffer = true;
    Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls");
    Response.Charset = "";
    Response.ContentType = "application/vnd.ms-excel";
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    GridView1.DataBind(); 


    GridView1.HeaderRow.Cells[0].Visible = false; 

    for (int i = 0; i < GridView1.Rows.Count;i++ )
    {
       GridViewRow row = GridView1.Rows[i];
       row.Cells[0].Visible = false;
       row.Cells[0].FindControl("chkCol0").Visible = false; 
     }
    GridView1.RenderControl(hw);
    Response.Write(style);
    Response.Output.Write(sw.ToString());
    Response.End();
}

また

エクスポートで、列をドロップします。次のようなもの:

GridView1.Columns[0].visible = false;
 GridView1.DataBind();
  GridView1.RenderControl(htmlWrite);
 Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"); 
于 2012-06-18T06:49:47.440 に答える
1

コントロールを非表示にする代わりに、Excel にエクスポートする前にコントロールを削除できます。
これは、セルをループして、セルに存在するコントロールを見つけることで実行できます。次に、コントロールの種類を特定し、そのセルから削除します。

コードは次のとおりです。

foreach (GridViewRow row in GridView1.Rows)
{
  row.BackColor = Color.White;
  foreach (TableCell cell in row.Cells)
  {
    cell.CssClass = "textmode";
    for (int i = 0; i < cell.Controls.Count; i++)
    {
      Control ctr = cell.Controls[i];
      if (ctr is TextBox)
        cell.Controls.Remove(ctr);
      else if (ctr is DropDownList)
        cell.Controls.Remove(ctr);
      else if (ctr is Label)
        {
          if (ctr.ClientID.Contains("lblrow"))
            cell.Controls.Remove(ctr);
        }
    }
  }
}

上記のコードでは、各行とセルをループしています。次に、そこに存在する ID lblrowを持つすべてのTextBox、DropdownList、および Labelを削除します。

于 2015-05-20T10:22:05.290 に答える