ASP.net(gridview导出的execl没有数据)求解给分

tiyo168 2012-06-06 09:35:10
/// <summary>
/// 显示所有数据到grid表
/// </summary>
private void displayLog()
{
this.gSysLos.DataSource = SysLogManager.GetAllSysLog();
this.gSysLos.DataBind();
}

protected void btnExportLog_Click(object sender, EventArgs e)
{
if (gSysLos.Rows.Count > 0)
{
//调用导出方法
ExportGridViewForUTF8(gSysLos, DateTime.Now.ToShortDateString() + ".xls");
}
}

/// <summary>
/// 导出方法
/// </summary>
/// <param name="GridView"></param>
/// <param name="filename">保存的文件名称</param>
private void ExportGridViewForUTF8(ExtAspNet.Grid GridView, string filename)
{

string attachment = "attachment; filename=" + filename;

Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", attachment);

Response.Charset = "UTF-8";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
Response.ContentType = "application/ms-excel";
this.EnableViewState = false;
System.IO.StringWriter sw = new System.IO.StringWriter();

HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView.RenderControl(htw);

Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();

}


...全文
159 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
JJYY0088 2012-06-06
  • 打赏
  • 举报
回复
GridView.RenderControl(htw);

GridView 这个是不是有冲突啊 ,这个服务器控件,换一个名称,
尼古拉特斯拉 2012-06-06
  • 打赏
  • 举报
回复
GridView.AllowPaging = false;//分页去掉
displayLog();//绑定数据
HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView.RenderControl(htw);

尼古拉特斯拉 2012-06-06
  • 打赏
  • 举报
回复
加上
GridView.AllowPaging = false;//分页去掉
displayLog();
tiyo168 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
矮油,终于写出来了,我把代码帖出来,希望能帮到遇到同样问题的人。谢谢大家的热情帮忙,散分
[/Quote]
//写表头
for (int i = 0; i < CountC; i++)
{
HttpContext.Current.Response.Write(gv.Columns[i].HeaderText + "\t");
}
HttpContext.Current.Response.Write("\n");
//写表内容
for (int RowNo = 0; RowNo <= CountR - 1; RowNo++)
{
for (int CloumnNo = 0; CloumnNo <= CountC - 1; CloumnNo++)
{
HttpContext.Current.Response.Write(gv.Rows[RowNo].Values[CloumnNo] + "\t");
}
HttpContext.Current.Response.Write("\n");
}
tiyo168 2012-06-06
  • 打赏
  • 举报
回复
//写表头
for (int i = 0; i < CountC; i++)
{
HttpContext.Current.Response.Write(gv.Columns[i].HeaderText + "\t");
}
HttpContext.Current.Response.Write("\n");
//写表内容
for (int RowNo = 0; RowNo <= CountR - 1; RowNo++)
{
for (int CloumnNo = 0; CloumnNo <= CountC - 1; CloumnNo++)
{
HttpContext.Current.Response.Write(gv.Rows[RowNo].Values[CloumnNo] + "\t");
}
HttpContext.Current.Response.Write("\n");
}
tiyo168 2012-06-06
  • 打赏
  • 举报
回复
矮油,终于写出来了,我把代码帖出来,希望能帮到遇到同样问题的人。谢谢大家的热情帮忙,散分
zyr987503101 2012-06-06
  • 打赏
  • 举报
回复
private void ToExcel(Control ctl, string FileName)
{
HttpContext.Current.Response.Charset = "UTF-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF7;
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8));
ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}
private void toExcelClk()
{
GridView1.AllowPaging = false;
GridView1.AllowSorting = false;
DataBindToGridview("order by id desc");
ToExcel(GridView1, "个人通讯录.xls");
GridView1.AllowPaging = true;
GridView1.AllowSorting = true;
DataBindToGridview("order by id desc");
}

protected void Button6_Click(object sender, EventArgs e)
{
toExcelClk();
}//导出
这是我实现的通讯录导出的方法,你自己研究下;
蓝崎 2012-06-06
  • 打赏
  • 举报
回复
应该不是没有导出数据吧,而是导出了一堆datarow类型的数据
你把gSysLos.Rows[RowNo]
应该改成gSysLos.Rows[RowNo].Cells[CloumnNo].Text。
我试了一下,就可以导出内容了
蓝崎 2012-06-06
  • 打赏
  • 举报
回复
应该不是没有导出数据吧,而是导出了一堆datarow类型的数据
你把gSysLos.Rows[RowNo]
应该改成gSysLos.Rows[RowNo].Cells[CloumnNo].Text。
我试了一下,就可以导出内容了
蓝崎 2012-06-06
  • 打赏
  • 举报
回复
应该不是没有导出数据吧,而是导出了一堆datarow类型的数据
你把gSysLos.Rows[RowNo]
应该改成gSysLos.Rows[RowNo].Cells[CloumnNo].Text。
我试了一下,就可以导出内容了
tiyo168 2012-06-06
  • 打赏
  • 举报
回复
我后来这样写,倒是能把表头输出,但是内容不知怎么搞:
int CountR = gSysLos.Rows.Count;//行数
int CountC = gSysLos.Columns.Count;//列数
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer = true;

string name = "lzjbook" + DateTime.Now.ToString("yyMMddhhmmss") + ".xls";

//设置Http的头信息,编码格式
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpContext.Current.Server.UrlEncode(name));
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";


//设置编码
HttpContext.Current.Response.Charset = "GB2312";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");



//写表头
for (int i = 0; i < CountC; i++)
{
HttpContext.Current.Response.Write(gSysLos.Columns[i].HeaderText + "\t");
}
HttpContext.Current.Response.Write("\n");
//写表内容
for (int RowNo = 0; RowNo <= CountR - 1; RowNo++)
{
string RowContent = "";
for (int CloumnNo = 0; CloumnNo <= CountC - 1; CloumnNo++)
{
RowContent += Convert.ToString(gSysLos.Rows[RowNo]) + "\t";
}
RowContent += "\n";
HttpContext.Current.Response.Write(RowContent);
}
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Close();
HttpContext.Current.ApplicationInstance.CompleteRequest();
tiyo168 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
这样试试
gSysLos.AllowPaging = false;//分页去掉
displayLog();//绑定数据
HtmlTextWriter htw = new HtmlTextWriter(sw);
gSysLos.RenderControl(htw);
[/Quote]

不行呀。试过绑定了。
string attachment = "attachment; filename=" + filename;

Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", attachment);

Response.Charset = "UTF-8";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
Response.ContentType = "application/ms-excel";
this.EnableViewState = false;
System.IO.StringWriter sw = new System.IO.StringWriter();

GridView.AllowPaging = false;//分页去掉
displayLog();//绑定数据


HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView.RenderControl(htw);

Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
tiyo168 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
Response.Output.Write(sw.ToString());
改为
HttpContext.Current.Response.Write(sw.ToString());试试
[/Quote]

不行。。。
尼古拉特斯拉 2012-06-06
  • 打赏
  • 举报
回复
这样试试
gSysLos.AllowPaging = false;//分页去掉
displayLog();//绑定数据
HtmlTextWriter htw = new HtmlTextWriter(sw);
gSysLos.RenderControl(htw);

尼古拉特斯拉 2012-06-06
  • 打赏
  • 举报
回复
你数据都没绑定能导出啥?
加上displayLog();//绑定数据
蓝崎 2012-06-06
  • 打赏
  • 举报
回复
Response.Output.Write(sw.ToString());
改为
HttpContext.Current.Response.Write(sw.ToString());试试
azhou88 2012-06-06
  • 打赏
  • 举报
回复
兄弟,我也在研究这个
tiyo168 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
GridView.RenderControl(htw);

GridView 这个是不是有冲突啊 ,这个服务器控件,换一个名称,
[/Quote]

GridView是表的Id
tiyo168 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
加上
GridView.AllowPaging = false;//分页去掉
displayLog();
[/Quote]
不行,应该跟分页没关

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧