关于datagrid的问题!谁遇到过这个问题?

cyf_713 2006-04-24 11:22:06
我用下面的代码把datagrid里的数据导入excel里:
datagrid不分页时,可以正常运行,现在的问题是
datagrid分页时,会出现下面的错误:

[类型“DataGridLinkButton”的控件“DataGrid1__ctl24__ctl1”必须放在具有 runat=server 的窗体标记内。]

这个“DataGridLinkButton”的控件应该是分页的页码,但是这个问题是什么原因造成的?怎么解决呢?

Response.Clear()
Response.Buffer = True
Response.ContentType = "application/vnd.ms-excel" '设置输出文件类型为excel文件。
Response.Charset = "utf-8"
Me.EnableViewState = False
Response.AppendHeader("Content-Disposition", "attachment;filename=" & savefilename)
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8") '设置输出流为简体中文

Dim myCItrad As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("ZH-CN", True)

Dim oStringWriter As System.IO.StringWriter = New System.IO.StringWriter(myCItrad)
Dim oHtmlTextWriter As System.Web.UI.HtmlTextWriter = New System.Web.UI.HtmlTextWriter(oStringWriter)

Me.DataGrid1.RenderControl(oHtmlTextWriter)
Response.Write(oStringWriter)
Response.Flush()
Response.Close()
Response.End()
...全文
200 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zahuifan 2006-04-24
  • 打赏
  • 举报
回复
搂主是把datagrid中的数据输出,当分页时遇到了问题.可以直接把DataSet中的数据输出,这样就不用担心分页的问题了.
Response.Clear()
Response.Buffer = True
Response.ContentType = "application/vnd.ms-excel" '设置输出文件类型为excel文件。
Response.Charset = "utf-8"
Me.EnableViewState = False
Response.AppendHeader("Content-Disposition", "attachment;filename=" & savefilename)
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8") '设置输出流为简体中文

Dim myCItrad As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("ZH-CN", True)

Dim oStringWriter As System.IO.StringWriter = New System.IO.StringWriter(myCItrad)
// write header
oStringWriter.WriteLine("姓名 性别");
oStringWriter.WriteLine("abc 1");
[姓名]和[性别]之间用Tab间隔.
cyf_713 2006-04-24
  • 打赏
  • 举报
回复
说的明白点,从datagrid往excel导数据时,不分页时没有没有问题
分页时出现下面的错误:
[类型“DataGridLinkButton”的控件“DataGrid1__ctl24__ctl1”必须放在具有 runat=server 的窗体标记内。]
什么原因?
carl13720 2006-04-24
  • 打赏
  • 举报
回复
帮你D一下,没看懂
loveme4180 2006-04-24
  • 打赏
  • 举报
回复
mark
webdiyer 2006-04-24
  • 打赏
  • 举报
回复
之所以超过一页会出错,是因为DataGrid的分页按钮其实就是LinkButton控件,而LinkButton按件必须放在具有runat="server"的HtmlForm标记内,否则因为没有注册客户端回发脚本而无法回发,这就是为什么DataGrid分页后超过一页必须放在Form runat="server"标记内的原因。

=====================
www.webdiyer.com
lxxupc 2006-04-24
  • 打赏
  • 举报
回复
如果excel的表头有合并的单元格,比如“地址”又分“省”、“市”等部分,应如何导入数据?
artoksxb 2006-04-24
  • 打赏
  • 举报
回复
不分页与没达到一页,都不会错吧。
一页以上,就不能用这种方法了。
直接用表到excel
cyf_713 2006-04-24
  • 打赏
  • 举报
回复
我现在直接从dataset里把数据导入到excel里,程序如下:

oStringWriter.WriteLine("故障单号 片区 电话号码 申告时间 修复时间 回访时间 故障现象 查修结果 未修复原因 查修者 历时 是否超时")
Dim i As Integer
For i = 0 To ds.Tables(0).Rows.Count - 1
Dim str As String
str = ds.Tables(0).Rows(i)("troubleid").ToString & " "
str &= ds.Tables(0).Rows(i)("areaname").ToString & " "
str &= ds.Tables(0).Rows(i)("tel").ToString & " "
str &= ds.Tables(0).Rows(i)("sgsj").ToString & " "
str &= ds.Tables(0).Rows(i)("gzxx").ToString & " "
str &= ds.Tables(0).Rows(i)("state").ToString & " "
str &= ds.Tables(0).Rows(i)("xfsj").ToString & " "
str &= ds.Tables(0).Rows(i)("reason").ToString & " "
str &= ds.Tables(0).Rows(i)("chaoshi").ToString & " "
str &= ds.Tables(0).Rows(i)("xfsj").ToString & " "
str &= ds.Tables(0).Rows(i)("trouble_last").ToString & " "
str &= ds.Tables(0).Rows(i)("hfsj").ToString & " "
str &= ds.Tables(0).Rows(i)("check_result").ToString & " "
str &= ds.Tables(0).Rows(i)("workername").ToString & " "
oStringWriter.WriteLine(str)
Next
然后打开excel,说不能导入数据,应该是制表位的问题吧,怎么解决呢?
batiraul 2006-04-24
  • 打赏
  • 举报
回复
把结果保存到服务器上的一个csv文件,然后在页面上写个到这个csv文件的超链接就ok了!
if(dt.Rows.Count != 0)
{
string tmp_path = HttpContext.Current.Server.MapPath("buf");
string filename = "rpt"+Guid.NewGuid().ToString() + ".csv";
StreamWriter sw = new StreamWriter(tmp_path + "\\" + filename, false, Encoding.Default);
sw.WriteLine("合作栏目,日期,入口用户数");
for(int i = 0; i < dt.Rows.Count; i++)
{
string str;
str = dt.Rows[i]["Page"].ToString() + ",";
str += dt.Rows[i]["DateStat"].ToString() + ",";
str += dt.Rows[i]["cursubs"].ToString();
sw.WriteLine(str);
}
sw.Flush();
sw.Close();
csvName = filename;
}

csv文件客户端自己就用excel打开了,如果是用户定制报表那就得自己写个报表客户端工具了!
lizheng__114 2006-04-24
  • 打赏
  • 举报
回复
mark
FreeIn2006 2006-04-24
  • 打赏
  • 举报
回复
<form runat=server>
里面内容
</form>
cyf_713 2006-04-24
  • 打赏
  • 举报
回复
DataGrid1__ctl24__ctl1应该是集成于datagrid里的页码控件,它在页面运行前是没有的,当页面运行时,脚本里会出现这段,我想可能是什么脚本影响的分页,使之出现了问题
活靶子哥哥 2006-04-24
  • 打赏
  • 举报
回复
服务器控件必须放在具有 runat=server 的Form标记内
cyf_713 2006-04-24
  • 打赏
  • 举报
回复
能不能说的明白点呢
renyu732 2006-04-24
  • 打赏
  • 举报
回复
好像override VerifyRenderingInServerForm()可以解决这个问题.
youyuan1980 2006-04-24
  • 打赏
  • 举报
回复
在html里面加一段
<form...>
里面内容
</form>

62,025

社区成员

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

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

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

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