导出绑有dropdownlist控件到EXCEL报错?如何改一下呢?
我在datagrid中绑定了一个dropdownlist下拉控件.我在导出的时候好像是连这个控件一块导出来的,报错:如下:
类型“Button”的控件“ctl00_ContentPlaceHolder1_DataGrid1_ctl02_ctl00”必须放在具有 runat=server 的窗体标记内。
错误行: DataGrid1.RenderControl(oHtmlTextWriter);下面加红了!
现在是如何改一下?不让这个控件导出来,让他的值导出来就可以?
- C# code
<asp:DataGrid ID="DataGrid1" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical" AllowSorting="True" OnCancelCommand="DataGrid1_CancelCommand" OnEditCommand="DataGrid1_EditCommand" OnItemDataBound="DataGrid1_ItemDataBound" OnUpdateCommand="DataGrid1_UpdateCommand" DataKeyField="nid"> <Columns> <asp:BoundColumn DataField="sendtime" HeaderText="呼叫时间" ReadOnly="True"></asp:BoundColumn> <asp:BoundColumn DataField="workercallerid" HeaderText="主叫坐席" ReadOnly="True"></asp:BoundColumn> <asp:BoundColumn DataField="SendCallerID" HeaderText="被叫电话" ReadOnly="True"></asp:BoundColumn> <asp:BoundColumn DataField="setcallerid" HeaderText="显示号码" ReadOnly="True"></asp:BoundColumn> <asp:BoundColumn DataField="workerhold" HeaderText="坐席通话时长" ReadOnly="True"></asp:BoundColumn> <asp:BoundColumn DataField="sendhold" HeaderText="用户通话时长" ReadOnly="True"></asp:BoundColumn> <asp:BoundColumn DataField="fee" HeaderText="呼叫费用" ReadOnly="True"></asp:BoundColumn> <asp:TemplateColumn HeaderText="营销结果"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem,"lbmc") %> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="dep_jieguo" runat="server"> </asp:DropDownList> </EditItemTemplate> </asp:TemplateColumn> <asp:BoundColumn DataField="jieguo" HeaderText="结果ID" ReadOnly="True"></asp:BoundColumn> <asp:BoundColumn DataField="RecFile" HeaderText="录音" ReadOnly="True"></asp:BoundColumn> <asp:EditCommandColumn ButtonType="PushButton" CancelText="取消" EditText="编辑" HeaderText="操作" UpdateText="更新"></asp:EditCommandColumn> </Columns></asp:DataGrid>
后台导出代码如下:
- C# code
CheckAdInfoSort(); FirstBindData(); Response.Clear(); Response.Buffer = true; Response.Charset = "GB2312"; Response.AppendHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToShortDateString() + ".xls"); Response.ContentEncoding = System.Text.Encoding.UTF7; //Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文 Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 DataGrid1.EnableViewState = false; DataGrid1.AllowPaging = 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); //导出时隐藏第4,5,7列,进行绑定输出 //DataGrid1.Columns[4].Visible = false; DataGrid1.Columns[6].Visible = false; DataGrid1.Columns[7].Visible = false; DataGrid1.Columns[8].Visible = false; DataGrid1.AlternatingItemStyle.BackColor = Color.White; //设置导出时的交替背景色为白色 DataGrid1.DataSource = ds.Tables[0]; DataGrid1.DataBind(); [color=#FF6600]DataGrid1.RenderControl(oHtmlTextWriter);[/color] Response.Write(oStringWriter.ToString()); Response.End(); DataGrid1.AllowPaging = true; DataGrid1.DataSource = ds.Tables[0]; DataGrid1.DataBind(); }
现在是如何让营销结果这个值导出来?
报的错我查了一下,我也有form这个表单!
报的那个错误应是我边控件一块导出来的错误!
[解决办法]
利用datacolumn把下拉菜单隐藏 visible=true;
在导出的那个页面加上
public override void VerifyRenderingInServerForm(Control control)
{
}
[解决办法]
protected void btnImport_Click(object sender, EventArgs e)
{
// HttpContext.Current.Response.Clear();//清除缓冲区流中的所有的内容输出
// HttpContext.Current.Response.Buffer = true;//获取一个值,该值指示是否缓冲输出,并在完成处理整个响应之后将其发送
// HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls");//.xls 将http头添加到输出流 DateTime.Now.DayOfYear.ToString()
// HttpContext.Current.Response.ContentEncoding = Encoding.UTF7;//设置输出流的http字符集
// HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";//设置输出流的http MiMe类型
// CultureInfo formatProvider = new CultureInfo("ZH-CN", true);//提供有关特定区域性的信息及如何设置日期和排序字符串的格式
// StringWriter stringwriter = new StringWriter(formatProvider);//实现一个用于将字符串写入System.IO.TextWriter,该信息存储在基础System.Text.StringBulider中
// HtmlTextWriter htmlwriter = new HtmlTextWriter(stringwriter);//将标记字符和文本写入到Asp.net服务器控件输出流,此类提供Asp.net服务器控件在向客户端呈现标记时所使用的格式设置功能
// SeriesView.HeaderRow.Cells[0].Visible = false;
//以下循环是控制单元格显示与否的,你也可以修改一下,控制某列是否显示,隐藏后就不会呗导出了
// for (int i = 0; i < SeriesView.Rows.Count; i++)
// {
// SeriesView.Rows[i].Cells[0].Visible = false;
// SeriesView.Rows[i].Cells[1].Width = 150;
// SeriesView.Rows[i].Cells[2].Width = 150;
// SeriesView.Rows[i].Cells[3].Width = 150;
// SeriesView.Rows[i].Cells[1].HorizontalAlign = HorizontalAlign.Center;
// SeriesView.Rows[i].Cells[2].HorizontalAlign = HorizontalAlign.Center;
// SeriesView.Rows[i].Cells[3].HorizontalAlign = HorizontalAlign.Center;
// }
// SeriesView.AllowPaging = false;
// //this.SeriesView.Rows[0].Cells[0].Visible = false;
// SeriesView.RenderControl(htmlwriter);//将服务器控件的内容输出到所提供的System.Web.UI.HtmlTextWriter对象中,如果已启用跟踪功能,则存储有关控件的跟踪信息
//SeriesView.AllowPaging = true;
// HttpContext.Current.Response.Write(stringwriter.ToString());//将一个字符数组写入http相应数据流
// HttpContext.Current.Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}