【问题标题】:Issue of addition of blank row in gridview在gridview中添加空白行的问题
【发布时间】:2015-04-25 12:02:15
【问题描述】:

我已从 db 表中获取数据,将其绑定到 gridview,然后将数据从 gridview 导出到 excel。它工作正常。

但是当我使用以下代码在数据绑定事件中的 gridview 顶部添加一行时:

protected void gvReports_DataBound(object sender, EventArgs e)
{
    if (gvReports.Rows.Count > 0)
    {
        GridViewRow row = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);

        int count = gvReports.HeaderRow.Cells.Count;
        TableHeaderCell cell = new TableHeaderCell();
        cell.BorderWidth = 0;
        cell.Text = "Commodity " + ddlCommMFArrival.SelectedItem.Text;
        cell.ColumnSpan = count - 2;
        row.Controls.Add(cell);
        row.BackColor = ColorTranslator.FromHtml("#f5fafd");
        gvReports.HeaderRow.Parent.Controls.AddAt(0, row);
    }
}

将 Gridview 导出到 Excel 的代码:

protected void btnExport_Click(object sender, EventArgs e)
{
    for (int i = 0; i < gvReports.Rows.Count; i++)
    {
        for (int j = 0; j < gvReports.Rows[i].Cells.Count; j++)
        {
            if (gvReports.Rows[i].Cells[j].Text == "NA")
            {
                gvReports.Rows[i].Cells[j].HorizontalAlign = HorizontalAlign.Right;
            }
        }
    }
    gvReports.HeaderRow.Cells[1].Visible = false;
    gvReports.HeaderRow.Cells[2].Visible = false;
    string filename = string.Empty;
    int ddlselect = Convert.ToInt32(ddlCommMFArrival.SelectedValue);
    if (ddlselect == 1)
    {
        filename = "MarketFee" + DateTime.Now.ToString().Replace("/", "").Replace(":", "").Replace(" ", "") + "";
    }
    else if (ddlselect == 2)
    {
        filename = "Commodity Arrival" + DateTime.Now.ToString().Replace("/", "").Replace(":", "").Replace(" ", "") + "";
    }

    //Export gridview data into MS Excel
    blExportToExcel blExport = new blExportToExcel();
    //Export gridview data into MS Excel
    blExport.ExportGridViewToExcel(gvReports, this, filename);
}

    public void ExportGridViewToExcel(GridView grv, System.Web.UI.Page pg, string fileName)
    {
        grv.AllowPaging = false;

        pg.Response.Clear();
        pg.Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".xls");
        pg.Response.Charset = "";
        pg.Response.ContentType = "application/vnd.xls";

        System.IO.StringWriter stringWrite = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
        grv.RenderControl(htmlWrite);
        pg.Response.Write(stringWrite.ToString());
        pg.Response.End();

        grv.AllowPaging = true;
    }

然后它在位置 0 以及 excel 中添加一个空白行(将数据从 gridview 导出到 excel),并从 gridview 中截断最后一行。有谁知道是什么问题?

【问题讨论】:

  • 如何以及何时将数据导出到 Excel?
  • @Eugene Podskal,我已经编辑了我的问题。请检查。
  • 你调试代码了吗???
  • 网格需要标记!
  • @Ganesh_Devlekar,是的,我已经调试了代码,在数据绑定事件中将行添加到 gridview 后,在标题行之后的 gridview 的位置 0 处将添加一个空白行。

标签: c# asp.net excel gridview


【解决方案1】:

尝试将您的 HeaderRow 加法逻辑移出 DataBound 并移入 RowCreated。将此添加到 GridView 声明中:

OnRowCreated="gvReports_RowCreated"

然后这是RowCreated(注意DataControlRowState.Insert):

protected void gvReports_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {
        GridViewRow row = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert);

        int count = e.Row.Cells.Count;
        TableHeaderCell cell = new TableHeaderCell();
        cell.BorderWidth = 0;
        cell.Text = "blah";
        cell.ColumnSpan = count - 2;
        row.Controls.Add(cell);
        row.BackColor = ColorTranslator.FromHtml("#f5fafd");
        gvReports.Controls[0].Controls.AddAt(0, row);
    }
}

【讨论】:

    猜你喜欢
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    相关资源
    最近更新 更多