读书人

导出绑有dropdownlist控件到EXCEL报错

发布时间: 2012-09-13 09:51:53 作者: rapoo

导出绑有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);
}

读书人网 >asp.net

热点推荐