datagrid导出数据到excel出错,大家帮忙分析一下
类型“DataGridLinkButton”的控件“dg__ctl2__ctl0”必须放在具有 runat=server 的窗体标记内。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Web.HttpException: 类型“DataGridLinkButton”的控件“dg__ctl2__ctl0”必须放在具有 runat=server 的窗体标记内。
源错误:
行 115: System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
行 116: System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
行 117: this.dg.RenderControl(oHtmlTextWriter);
行 118: Response.Write(oStringWriter.ToString());
行 119:
源文件: f:\973项目\login\1.aspx.cs 行: 117
1.aspx:
<%@ Page language="c#" Codebehind="1.aspx.cs" AutoEventWireup="false" Inherits="LogIn._1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<form id="frm" runat="server">
<FONT face="宋体"></FONT><FONT face="宋体"></FONT>
<BR>
<BR>
<asp:DataGrid id="dg" runat="server">
<Columns>
<asp:ButtonColumn Text="Button" CommandName="sa"></asp:ButtonColumn>
</Columns>
</asp:DataGrid>
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
</form>
</body>
</HTML>
1.aspx.cs:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace LogIn
{
/// <summary>
/// Summary description for _1.
/// </summary>
public class _1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid dg;
protected System.Web.UI.WebControls.Button Button1;
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
SqlConnection conn = new SqlConnection ("data source=(local);initial catalog=Northwind;Pwd=sa;User ID=sa");
SqlCommand cmd = new SqlCommand ("Select LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country from Employees", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
dg.DataSource = ds.Tables[0];
dg.DataBind();
}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Response.Clear();
Response.Buffer= true;
Response.Charset="GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
this.EnableViewState = false;
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN",true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
this.dg.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
}
}
}
我的控件都放在<form runat=server> </form>内了呀!
另外,我只要不在datagrid列中加asp:ButtonColumn 就没有问题,这怎么回事呢?
我现在问题是:
我的datagrid内本来就有asp:ButtonColumn 列
我怎样把其他列的数据导出到excel而不出错?多谢指教!
问题点数:100、回复次数:14Top
1 楼hedonister(冰戈)回复于 2005-02-28 11:10:51 得分 10
太多,没时间看,帮你顶Top
2 楼anycall2004(没事,瞎转悠!)回复于 2005-02-28 11:16:07 得分 10
另开个页面不分页 就可以了~~或者把sortFiled 都去掉 分页去掉可能可以。Top
3 楼showmetoyou(好的)回复于 2005-02-28 11:24:34 得分 10
你的代码没有问题,我也遇到过这个问题!分页的情况下是会出错的!
解决方法:用一个隐藏datagrid取得数据!通过它导出到excel!我想你明白了!Top
4 楼zipo(程序员)回复于 2005-02-28 11:24:56 得分 10
帮你顶
Top
5 楼Alexandria(灌技术的水)回复于 2005-02-28 11:27:15 得分 10
那就不要加asp:ButtonColumn,没看出它有什么作用Top
6 楼Night_Elf(风暴虫)回复于 2005-02-28 11:32:32 得分 10
加上Protected oHtmlTextWriter As System.Web.UI.HtmlTextWriter 试试Top
7 楼onlytiancai(谁染枫林醉)回复于 2005-02-28 11:47:57 得分 10
没看懂这段代码的原理,偶对asp.net page机理一知半解Top
8 楼huwei2003(凡)回复于 2005-02-28 11:48:07 得分 10
你看一下aspx的html,是不是<form name='form1' ranat=server>位置放得不对???Top
9 楼onlytiancai(谁染枫林醉)回复于 2005-02-28 11:49:44 得分 10
DataGrid的RenderControl()方法是做什么用的呀,你把dg的默认显示给替换了呀?你想让那个dg显示一段excel数据?Top
10 楼woft()回复于 2005-02-28 12:53:15 得分 0
to anycall2004(╃小〥斌╄) 和 showmetoyou(好的)
datagrid本身的allowsorting 和 allowpaging属性就是false,默认的,我没改。
to Alexandria(灌技术的水)
buttonColumn的功能是少不了的,因为还有其它需要。我只想导出datagrid中的数据列到excel
to Night_Elf(风暴虫)
一样的错误,不是这里原因
to huwei2003(凡)
我开始查了一下,论坛上有很多这样的错误,所以我特别看了的,一楼的代码上也写了,我看没问题
to onlytiancai(谁染枫林醉)
这个函数的作用我不甚清楚,我本来是想把datagrid的数据导出到客户端excel中。参考孟子E章的方法写的。
我用的是最简单的一个例子试,但是不知道错误原因,谁愿意帮我试一个简单的例子,就是一个datagrid(里面至少有一列linkbutton),输出到excel?多谢
Top
11 楼yistudio(阳光灿烂的日子)回复于 2005-02-28 13:00:21 得分 4
要从datagrid中将数据导出来,象什么分页、按钮列、超链接列等等都不能要,或者用csv格式文件Top
12 楼beyondjay(初学者)回复于 2005-02-28 13:28:17 得分 4
哈哈哈哈哈哈,我来回答吧,我遇到过。
因为你的grid有分页!
把他重新绑定但是不要分页,然后导出excel,然后再绑定分页的显示给用户就可以了。分拿来。Top
13 楼lampson123(微软)回复于 2005-02-28 13:39:23 得分 2
好,又学了一招,呵呵,多谢Top
14 楼woft()回复于 2005-03-02 12:08:14 得分 0
to beyondjay
我的datagrid没有分页!!!没人能解答了吗?Top




