怎样把DataGrid中的数据导出到Excel中?急急急!!!!!!!!!!!!!! 怎样把DataGrid中的数据导出到Excel中?急急急!!!!!!!!!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 protected void Button1_Click(object sender, EventArgs e) { //输出EXCEL StringWriter sw = new StringWriter(); sw.WriteLine("用户名\t登录名\t登录IP\t登录时间\t登录状态(0不成功2成功)\t操作"); using (SqlConnection Conn = new SqlConnection(manageClass.strConn())) { Conn.Open(); using (SqlCommand Cmd = new SqlCommand()) { Cmd.Connection = Conn; Cmd.CommandText = "绑定DATAGRID的SQL语句" try { SqlDataReader dr = Cmd.ExecuteReader(); while (dr.Read()) { sw.WriteLine(dr["username"] + "\t" + getsname(dr["userid"].ToString()) + "\t" + dr["userip"] + "\t" + dr["usertime"] + "\t" + dr["succeed"] + "\t" + dr["handle"]); } dr.Close(); } catch { Cmd.Dispose(); Cmd.Parameters.Clear(); Conn.Dispose(); Conn.Close(); Response.End(); } Cmd.Dispose(); Cmd.Parameters.Clear(); } Conn.Dispose(); Conn.Close(); } sw.Close(); Response.AddHeader("Content-Disposition", "attachment; filename=log.xls"); Response.ContentType = "application/ms-excel"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.Write(sw); Response.End(); } 转贴。#region 用于将一个DATAGRID导出到EXCEL文件中,可含模板列. /// <summary> /// 用于将一个DATAGRID导出到EXCEL文件中,可含模板列.模板列中可含文本框、列表框等其他控件, /// </summary> /// <param name="dg"></param> /// <param name="Response"></param> /// <returns></returns> public static string GridToExcel_Rich(DataGrid dg, System.Web.HttpResponse Response) { try { DataGrid dgTemp = new DataGrid(); DataTable dt = new DataTable(); DataRow dr; Response.Clear(); //用dg生成一个DataTable dt; int i, j, nColCount = dg.Columns.Count; for(i=0; i<nColCount; i++) //在这里用visible属性就不可以了,无法生成表,不知为什么.表结构可以生成,但下面的加入行操作不行. //if (dg.Columns[i].Visible) { dt.Columns.Add(dg.Columns[i].HeaderText); } for(j=0; j<dg.Items.Count; j++) { dr = dt.NewRow(); for(i=0; i<nColCount; i++) //这里用visible没影响. //if (dg.Columns[i].Visible) { if(dg.Columns[i] is System.Web.UI.WebControls.TemplateColumn) { //要增加对其他控件的支持可修改这里。 if (dg.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.TextBox) dr[i] = ((System.Web.UI.WebControls.TextBox)dg.Items[j].Cells[i].Controls[1]).Text; else if (dg.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.Label) dr[i] = ((System.Web.UI.WebControls.Label)dg.Items[j].Cells[i].Controls[1]).Text; else if (dg.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.DropDownList) dr[i] = ((System.Web.UI.WebControls.DropDownList)dg.Items[j].Cells[i].Controls[1]).SelectedItem.Text; } else if (dg.Columns[i] is System.Web.UI.WebControls.BoundColumn) dr[i] = dg.Items[j].Cells[i].Text; } dt.Rows.Add(dr); } //只能先全部生成,再删除visible为false的列了. for(i=0; i<nColCount; i++) if(!dg.Columns[i].Visible) dt.Columns.Remove(dt.Columns[i].ColumnName); dgTemp.DataSource = dt.DefaultView; dgTemp.DataBind(); //输出 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文件。 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); dgTemp.RenderControl(oHtmlTextWriter); Response.Write(oStringWriter.ToString()); Response.End(); return ""; } catch(Exception ex) { return ex.Message; } } #endregion this.Datagrid1.DataSource=DV; this.Datagrid1.DataBind(); string FileName="查询结果.xls"; Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8).Replace("+"," ")); Response.Charset = "GB2312"; Response.ContentEncoding=System.Text.Encoding.UTF8; Response.ContentType = "application/vnd.ms-excel"; this.EnableViewState= true; System.IO.StringWriter tw = new System.IO.StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(tw); Datagrid1.RenderControl(hw); Response.Write(tw.ToString()); Response.End(); vs可以单独调试一个方法吗? 关于winform程序 动态赋值控件的问题,好心人帮忙解答一下呵呵 button的TEXT datatable绑定到水晶报表的dataset(很急) 在前台javascript里 怎么直接取后台Session里面的值 关于受保护的内存问题 如何使用C#代码实现Windows 2003 serverIIS动态连接池刷新操作 希望大家指导?? 求一正则表达式 关于filestream的使用---知道的话很简单 求助:有什么方法可以读出文件的摘要信息? 对实时数据库进行操作出现的No free cursor问题
{
//输出EXCEL
StringWriter sw = new StringWriter();
sw.WriteLine("用户名\t登录名\t登录IP\t登录时间\t登录状态(0不成功2成功)\t操作"); using (SqlConnection Conn = new SqlConnection(manageClass.strConn()))
{
Conn.Open(); using (SqlCommand Cmd = new SqlCommand())
{
Cmd.Connection = Conn;
Cmd.CommandText = "绑定DATAGRID的SQL语句"
try
{
SqlDataReader dr = Cmd.ExecuteReader();
while (dr.Read())
{
sw.WriteLine(dr["username"] + "\t" + getsname(dr["userid"].ToString()) + "\t" + dr["userip"] + "\t" + dr["usertime"] + "\t" + dr["succeed"] + "\t" + dr["handle"]); }
dr.Close();
}
catch
{
Cmd.Dispose();
Cmd.Parameters.Clear();
Conn.Dispose();
Conn.Close();
Response.End(); }
Cmd.Dispose();
Cmd.Parameters.Clear();
}
Conn.Dispose();
Conn.Close();
}
sw.Close();
Response.AddHeader("Content-Disposition", "attachment; filename=log.xls");
Response.ContentType = "application/ms-excel";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.Write(sw);
Response.End();
}
#region 用于将一个DATAGRID导出到EXCEL文件中,可含模板列.
/// <summary>
/// 用于将一个DATAGRID导出到EXCEL文件中,可含模板列.模板列中可含文本框、列表框等其他控件,
/// </summary>
/// <param name="dg"></param>
/// <param name="Response"></param>
/// <returns></returns>
public static string GridToExcel_Rich(DataGrid dg, System.Web.HttpResponse Response)
{
try
{
DataGrid dgTemp = new DataGrid();
DataTable dt = new DataTable();
DataRow dr;
Response.Clear();
//用dg生成一个DataTable dt;
int i, j, nColCount = dg.Columns.Count;
for(i=0; i<nColCount; i++)
//在这里用visible属性就不可以了,无法生成表,不知为什么.表结构可以生成,但下面的加入行操作不行.
//if (dg.Columns[i].Visible)
{
dt.Columns.Add(dg.Columns[i].HeaderText);
}
for(j=0; j<dg.Items.Count; j++)
{
dr = dt.NewRow();
for(i=0; i<nColCount; i++)
//这里用visible没影响.
//if (dg.Columns[i].Visible)
{
if(dg.Columns[i] is System.Web.UI.WebControls.TemplateColumn)
{
//要增加对其他控件的支持可修改这里。
if (dg.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.TextBox)
dr[i] = ((System.Web.UI.WebControls.TextBox)dg.Items[j].Cells[i].Controls[1]).Text;
else if (dg.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.Label)
dr[i] = ((System.Web.UI.WebControls.Label)dg.Items[j].Cells[i].Controls[1]).Text;
else if (dg.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.DropDownList)
dr[i] = ((System.Web.UI.WebControls.DropDownList)dg.Items[j].Cells[i].Controls[1]).SelectedItem.Text;
}
else if (dg.Columns[i] is System.Web.UI.WebControls.BoundColumn)
dr[i] = dg.Items[j].Cells[i].Text;
}
dt.Rows.Add(dr);
}
//只能先全部生成,再删除visible为false的列了.
for(i=0; i<nColCount; i++)
if(!dg.Columns[i].Visible)
dt.Columns.Remove(dt.Columns[i].ColumnName);
dgTemp.DataSource = dt.DefaultView;
dgTemp.DataBind();
//输出
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文件。
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);
dgTemp.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
return "";
}
catch(Exception ex)
{
return ex.Message;
}
}
#endregion
this.Datagrid1.DataBind();
string FileName="查询结果.xls"; Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8).Replace("+"," "));
Response.Charset = "GB2312";
Response.ContentEncoding=System.Text.Encoding.UTF8;
Response.ContentType = "application/vnd.ms-excel";
this.EnableViewState= true;
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
Datagrid1.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();