前几天要做一个将datagrid数据倒出到excel的程序,从网上考了一点代码,解决了这个问题
private void SaveResult_Click(object sender, EventArgs e)
{
try
{
Response.Clear();
Response.Buffer= true;
Response.Charset="GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");
Response.ContentEncoding = Encoding.GetEncoding("GB2312");
//设置输出流为简体中文
Response.ContentType = "application/ms-excel";
//设置输出文件类型为excel文件。
this.EnableViewState = false;
CultureInfo myCItrad = new CultureInfo("ZH-CN",true);
StringWriter oStringWriter = new StringWriter(myCItrad);
HtmlTextWriter oHtmlTextWriter = new HtmlTextWriter(oStringWriter);
dgMqcLog.PagerStyle.Visible = false;
this.ClearControls(dgMqcLog);
dgMqcLog.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
后来发现,如果datagrid加了分页和排序功能,就没法正常倒出了,没办法,又去网上搜索,有为大哥说加上下面的代码可以,我也没完全弄清楚,不过还是很奏效的.相信对大家有点用
private void ClearControls(Control control)
{
for(int i=control.Controls.Count -1; i>=0; i--)
{
ClearControls(control.Controls[i]);
}
if(!(control is TableCell))
{
if(control.GetType().GetProperty("SelectedItem") != null)
{
LiteralControl literal = new LiteralControl();
control.Parent.Controls.Add(literal);
try
{
literal.Text = (string)control.GetType().GetProperty("SelectedItem").GetValue(control,null);
}
catch
{
}
control.Parent.Controls.Remove(control);
}
else if(control.GetType().GetProperty("Text") != null)
{
LiteralControl literal = new LiteralControl();
control.Parent.Controls.Add(literal);
literal.Text = (string)control.GetType().GetProperty("Text").GetValue(control,null);
control.Parent.Controls.Remove(control);
}
}
return;
}