Gridview 将动态/多网格视图导出到excel
我有以下代码来生成多个gridviewGridview 将动态/多网格视图导出到excel,gridview,Gridview,我有以下代码来生成多个gridview private void LoadData() { .... .... for (int i = 0; i <= batchNo.Split(',').Length - 1; i++) { GridView gv = new GridView(); BoundField BatchID = new BoundField(); BatchID.DataField = "B
private void LoadData()
{
....
....
for (int i = 0; i <= batchNo.Split(',').Length - 1; i++)
{
GridView gv = new GridView();
BoundField BatchID = new BoundField();
BatchID.DataField = "BatchID";
BatchID.HeaderText = "Batch ID";
BoundField BatchDate = new BoundField();
BatchDate.DataField = "BatchDate";
BatchDate.HeaderText = "Batch Date";
BoundField BatchAmount = new BoundField();
BatchAmount.DataField = "BatchAmount";
BatchAmount.HeaderText = "Batch Amount";
Label lbTitle = new Label();
lbTitle.Text = "Batch No: " + batchNo[i];
gv.AutoGenerateColumns = false;
gv.EmptyDataText = "No batch data.";
// query goes here
sSql = "select * from batchTable where BatchID = " + batchNo.Split(',')[i];
gv.Columns.Add(BatchID);
gv.Columns.Add(BatchDate);
gv.Columns.Add(BatchAmount);
gv.ShowFooter = true;
gv.DataSource = db.returnDataSet(sSql);
gv.DataBind();
phGridView.Controls.Add(new LiteralControl("<br />"));
phGridView.Controls.Add(lbTitle);
phGridView.Controls.Add(gv);
total = 0;
foreach (GridViewRow gvr in gv.Rows)
{
if (gvr.RowType == DataControlRowType.DataRow)
{
double val = 0.0;
try
{
val = Convert.ToDouble(gvr.Cells[2].Text);
}
catch (Exception ex) { }
total = val + total;
}
}
gv.FooterRow.Cells[2].Text = total.ToString();
}
}
但是这个函数可以导出所有没有lbTitle.Text和页脚(total)的gridview。如何根据屏幕上的显示将gridview导出到excel。示例如下
--------------------------------------------
|Batch ID | Batch Date | Batch Amount |
--------------------------------------------
|Batch No: 1234 |
| A1 | 3/12/2019 | 1000.00 |
| A2 | 3/12/2019 | 500.00 |
--------------------------------------------
| | | 1500.00 |
--------------------------------------------
|Batch No: 5555 |
| D1 | 3/12/2019 | 800.00 |
| E2 | 3/12/2019 | 300.00 |
--------------------------------------------
| | | 1100.00 |
--------------------------------------------
|Batch No: 6565 |
| Z1 | 3/12/2019 | 1200.00 |
| Z2 | 3/12/2019 | 1500.00 |
--------------------------------------------
| | | 2700.00 |
--------------------------------------------
谢谢你的帮助。谢谢您可以使用ApachePOI库来实现这一点。
经过多次尝试和错误后,可以在以下位置找到示例和详细信息:。。我找到了解决办法。。不确定这是否是最好的解决方案,但它暂时有效。。这是我的密码。。感谢所有的意见和建议
protected void bExportBatch_Click(object sender, EventArgs e)
{
LoadData();
Response.Clear();
Response.Buffer = true;
Response.ClearContent();
Response.ClearHeaders();
Response.Charset = "";
string FileName = "Batch_End_Shift" + ".xls";
StringWriter strwritter = new StringWriter();
HtmlTextWriter htmltextwrtter = new HtmlTextWriter(strwritter);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);
batchID = Request.QueryString["id"];
// To check if got more than 1 gv
if (batchID .Contains(','))
{
LoadDataGV(true, htmltextwrtter); // LoadDataGV() for more than 1 gv
Response.Write(strwritter.ToString());
Response.End();
}
else
{
LoadData(); // LoadData for 1 gv only
gv.GridLines = GridLines.Both;
gv.HeaderStyle.Font.Bold = true;
gv.RenderControl(htmltextwrtter);
Response.Write(strwritter.ToString());
Response.End();
}
}
protected void bExportBatch_Click(object sender, EventArgs e)
{
LoadData();
Response.Clear();
Response.Buffer = true;
Response.ClearContent();
Response.ClearHeaders();
Response.Charset = "";
string FileName = "Batch_End_Shift" + ".xls";
StringWriter strwritter = new StringWriter();
HtmlTextWriter htmltextwrtter = new HtmlTextWriter(strwritter);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);
batchID = Request.QueryString["id"];
// To check if got more than 1 gv
if (batchID .Contains(','))
{
LoadDataGV(true, htmltextwrtter); // LoadDataGV() for more than 1 gv
Response.Write(strwritter.ToString());
Response.End();
}
else
{
LoadData(); // LoadData for 1 gv only
gv.GridLines = GridLines.Both;
gv.HeaderStyle.Font.Bold = true;
gv.RenderControl(htmltextwrtter);
Response.Write(strwritter.ToString());
Response.End();
}
}