急!急!GridView是代码分页的,要全部导出EXCEL,而不是gridview第一页
请教各位高手:
GridView是代码分页的,要全部导出EXCEL,而不是gridview第一页
GridView1.AllowPaging = False不能用,因为我是代码分页的。
[解决办法]
public void DataTableToExcel(System.Web.HttpResponse response, DataSet ds, string strDefaultName)
{
const string EXTEND_XLS = "xls";
const string EXTEND_CSV = "csv";
try
{
if (null == ds || ds.Tables.Count< 1)
{
return;
}
if (null == strDefaultName || strDefaultName.Trim().Length < 1)
{
throw new ArgumentException("导出的默认文件名不可为空!");
}
int iDocPos = strDefaultName.LastIndexOf('.');
if (iDocPos <= 0)
{
throw new ArgumentException("导出的默认文件名不正确!");
}
iDocPos++;
//取得扩展名
string strExtenName = strDefaultName.Substring(iDocPos, strDefaultName.Length - iDocPos);
if (strExtenName.Trim().ToLower() != EXTEND_XLS && strExtenName.Trim().ToLower() != EXTEND_CSV)
{
throw new ArgumentException("导出的默认文件的扩展名不正确!");
}
//导出的文件的分隔符
string strSplitChar = string.Empty;
if (strExtenName.Trim().ToLower() == EXTEND_XLS)
{
strSplitChar = "\t";
}
else if (strExtenName.Trim().ToLower() == EXTEND_CSV)
{
strSplitChar = ",";
}
string data = "";
System.IO.StringWriter sw = new System.IO.StringWriter();
string strTemp = string.Empty;
foreach(DataTable dt in ds.Tables)
{
//输出头
foreach (DataColumn column in dt.Columns)
{
strTemp += column.ColumnName + ",";
}
//for (int i = 0; i < dt.Columns.Count; i++)
//{
// if (i != dt.Columns.Count - 1)
// {
// strTemp += dt.Columns[i].ColumnName + strSplitChar;
// }
// else
// {
// strTemp += dt.Columns[i].ColumnName;
// }
//}
sw.WriteLine(strTemp);
strTemp = "";
//输出内容
for (int ii = 0; ii < dt.Rows.Count; ii++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
if (j != dt.Columns.Count - 1)
{
strTemp += dt.Rows[ii][j].ToString() + strSplitChar;
}
else
{
strTemp += dt.Rows[ii][j].ToString();
}
}
sw.WriteLine(strTemp);
strTemp = "";
}
data = "\n\n\n\n";
sw.WriteLine(data);
}
sw.Close();
response.Buffer = false;
response.AppendHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(strDefaultName, System.Text.Encoding.UTF8));
response.ContentType = "application/ms-excel";
response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
response.Write(sw);
response.Flush();
response.End();
}
catch (Exception ex)
{
throw ex;
}
}
[解决办法]
代码分页最少也要执行一次全体查询的,包括查询全体数据的条数,不好用用GridView导了,就用最初的数据源了,所有的数据
[解决办法]
你要导出的是全部数据,而你的dgv的数据源实际上只包含一页,所以思路上不对。
肯定要取出全部数据,但是不必绑定到dgv上,直接把dataset导出即可。
给你个导出dataset到excel的类:
A Lightweight Server-Side DataSet-to-Excel Class