我正在使用Export Gridview to Excel。在Gridview出现之前,用户将进行一些过滤。我想我的导出按钮似乎不起作用,因为我没有把我的Gridview放在页面加载....
继承我的导出代码:
protected void Button2_Click(object sender, EventArgs e)
{
Response.ClearContent();
Response.AppendHeader("content-disposition", "attachment; filename=logbook.xls");
Response.ContentType = "application/excel";
StringWriter stringWriter = new StringWriter();
HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);
GridView1.RenderControl(htmlTextWriter);
Response.Write(stringWriter.ToString());
Response.End();
}
我的Gridview代码:
protected void btnSearch_Click(object sender, EventArgs e)
{
BindGridviewData(ddlSystemList.SelectedValue);
}
private void BindGridviewData(string s)
{
string ConnectionStringB = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;
using (SqlConnection connectionB = new SqlConnection(ConnectionStringB))
{
connectionB.Open();
SqlCommand cmd = new SqlCommand();
if (s == "Webloan")
{
cmd.Connection = connectionB;
cmd.CommandText = "Select a.ldatetime as DATE, a.username as USERNAME, a.fullname as FULLNAME, a.description as DESCRIPTION, b.action_name as ACTION from WEBLOAN_SERVER.webloan.dbo.logbook a join WEBLOAN_SERVER.webloan.dbo.action_def b on a.action_no = b.action_no where DATEDIFF(day,ldatetime,@date_exec1) <= 0 and DATEDIFF(day,ldatetime,@date_exec2) >= 0";
cmd.CommandType = CommandType.Text;
}
if (s == "Saveplus")
{
cmd.Connection = connectionB;
cmd.CommandText = "Select top 10 from WEBLOAN_SERVER.saveplus.dbo.logbook where DATEDIFF(day,ldatetime,@date_exec) = 0";
cmd.CommandType = CommandType.Text;
}
cmd.Parameters.AddWithValue("@date_exec1", txtDate.Text);
cmd.Parameters.AddWithValue("@date_exec2", txtDate2.Text);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
connectionB.Close();
}
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex; //assign new page number
BindGridviewData(ddlSystemList.SelectedValue);
//GridView1.DataBind(); // bind data to gridview
}
我的页面加载代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
txtDate.Text = DateTime.Now.ToString("MM/d/yyyy");
txtDate2.Text = DateTime.Now.ToString("MM/d/yyyy");
}
}
我还添加了覆盖代码:
public override void VerifyRenderingInServerForm(Control control)
{
}
我是ASP的新手...我非常需要这方面的帮助..谢谢
PS:我正在使用更新面板,我的生成到Excel按钮位于我的更新面板
中答案 0 :(得分:1)
根据您的数据进行必要的更改。
try
{
DataSet ds = ViewState["Data"] as DataSet;
DataView sortedView = (ds.Tables[0]).DefaultView;
//DataTable dt = ViewState["Data"].ToString();
//Create a dummy GridView
GridView GridView1 = new GridView();
GridView1.AllowPaging = false;
GridView1.DataSource = sortedView;
GridView1.DataBind();
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=AIDH.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
for (int i = 0; i < GridView1.Rows.Count; i++)
{
//Apply text style to each Row
GridView1.Rows[i].Attributes.Add("class", "textmode");
}
GridView1.Caption = "AIDH Master";
GridView1.RenderControl(hw);
//style to format numbers to string
//string style = @"<style> .textmode { mso-number-format:\@; } </style>";
//Response.Write(style);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
}
catch (Exception ex)
{
Master.ErrorMessage(ex.ToString());
}
答案 1 :(得分:0)
尝试下面的代码来生成excel,在我的例子中是它的工作
if (gv.Rows.Count > 0)
{
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
//Get the HTML for the control.
gv.RenderControl(hw);
//Write the HTML back to the browser.
//Response.ContentType = application/vnd.ms-excel;
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + strFileName);
EnableViewState = false;
Response.Write(tw.ToString());
Response.End();
}