先上图,如图所示导出所有查询出的数据

用的是AspNetPager分页控件,这个导出方法,不受分页和gridview列中数据的约束,可以导出您想导出的数据
首先前台页面代码,lblink即为导出excel的显示lable
<div class="span2"><div class="input-group"><asp:Button ID="btnSearch" runat="server" CssClass="btn btn-default" Text="查询" OnClick="btnSearch_Click" /><asp:Label ID="lblink" CssClass="label" runat="server" Visible="False">asp:Label>div>div>
后台代码中,首先查询事件中声明一个全局变量excelInt ,任意设置一个数
protected void btnSearch_Click(object sender, EventArgs e){excelInt = 3;lblink.Visible = true;//设置lblink为不可见this.AspNetPager1.CurrentPageIndex = 1;GetData();}
在绑定事件中GetData(),设置显示Excel的导出内容,selectdata为excel的导出方法,里面是传入的查询条件的参数
if (excelInt == 3){selectdata(parmAgentName, parmIsState, parmStuName, parmRcc, parmContractName);}
private void selectdata(string parmAgentName, string parmIsState, string parmStuName, string parmRcc, string parmContractName){string filepath = Request.MapPath("/") + @"COD\report\";//在该项目下建的一个文件夹DataRow rowPart;System.Data.DataTable workTable = new System.Data.DataTable("LX");workTable.Columns.Add("代理名称");//excel导出的表头workTable.Columns.Add("SID");workTable.Columns.Add("学生名称");workTable.Columns.Add("学生生日");workTable.Columns.Add("合同名称");workTable.Columns.Add("币种");workTable.Columns.Add("到款金额");workTable.Columns.Add("到款时间");workTable.Columns.Add("签约总人数");workTable.Columns.Add("返佣百分比");workTable.Columns.Add("应返金额");workTable.Columns.Add("汇率");workTable.Columns.Add("应返(RMB)金额");workTable.Columns.Add("返佣状态");var dsPart = DB.Context.FromProc("proc_AgentMoeny")//通过储存过程查询满足条件的数据.AddInParameter("@PageCurrent", DbType.Int32, AspNetPager1.CurrentPageIndex).AddInParameter("@PageSize", DbType.Int32, AspNetPager1.PageSize).AddInParameter("@AgentName", DbType.String, parmAgentName).AddInParameter("@IsState", DbType.String, "12").AddInParameter("@StuName", DbType.String, parmStuName).AddInParameter("@PinYin", DbType.String, "").AddInParameter("@Rcc", DbType.String, parmRcc).AddInParameter("@ContractName", DbType.String, parmContractName).AddInParameter("@AgentID", DbType.Int32, 0).AddInParameter("@ContractID", DbType.Int32, 0).AddInParameter("@RMoneyDate", DbType.String, "").AddInParameter("@sp", DbType.Int32, 4).ToDataSet();if (dsPart != null){for (int i = 0; i < dsPart.Tables[0].Rows.Count; i++){rowPart = workTable.NewRow();rowPart["代理名称"] = dsPart.Tables[0].Rows[i]["name"].ToString();rowPart["SID"] = dsPart.Tables[0].Rows[i]["SID"].ToString();rowPart["学生名称"] = dsPart.Tables[0].Rows[i]["StuName"].ToString();rowPart["学生生日"] = dsPart.Tables[0].Rows[i]["birthday"].ToString();rowPart["合同名称"] = dsPart.Tables[0].Rows[i]["contractName"].ToString();rowPart["币种"] = dsPart.Tables[0].Rows[i]["ReturnCommissionCurrency"].ToString();rowPart["到款金额"] = dsPart.Tables[0].Rows[i]["ReturnCommission"].ToString();rowPart["到款时间"] = dsPart.Tables[0].Rows[i]["InvoiceReceiveDate"].ToString();
//有数据是数据库中无法直接获取的,通过求出的数据再次查询获取所需的数据rowPart["签约总人数"] = Com.GetStuCount(dsPart.Tables[0].Rows[i]["AgentID"].ToString(), dsPart.Tables[0].Rows[i]["ContractID"].ToString());rowPart["返佣百分比"] = Com.GetPercent(Convert.ToInt32(rowPart["签约总人数"].ToString()), dsPart.Tables[0].Rows[i]["ContractID"].ToString());rowPart["应返金额"] = Com.GetReturnMoney(Convert.ToDecimal(dsPart.Tables[0].Rows[i]["ReturnCommission"].ToString()), Convert.ToDecimal(rowPart["返佣百分比"].ToString()));rowPart["汇率"] = string.IsNullOrEmpty(dsPart.Tables[0].Rows[i]["CurrRate"].ToString()) == true ? "0" : dsPart.Tables[0].Rows[i]["CurrRate"].ToString();rowPart["应返(RMB)金额"] = Com.GetReturnRMB(Convert.ToDecimal(rowPart["汇率"].ToString()), Convert.ToDecimal(rowPart["应返金额"].ToString()));if (dsPart.Tables[0].Rows[i]["IsState"].ToString() == "1")//返佣状态在数据库中存储的为数字,转为相应的文字{rowPart["返佣状态"] = "确认到款";}else if (dsPart.Tables[0].Rows[i]["IsState"].ToString() == "2"){rowPart["返佣状态"] = "已标识";}else if (dsPart.Tables[0].Rows[i]["IsState"].ToString() == "3"){rowPart["返佣状态"] = "已付款";}else{rowPart["返佣状态"] = "未确认";}workTable.Rows.Add(rowPart);}}string filenamePart = Com.ExportToTxt(workTable, filepath);this.lblink.Text = " + filenamePart + "' target=_blank>点击导出资源明细";}
上面所用到的方法几个方法
private const string CSVPOSTFIX = ".xls";
////// 把数据文件导入到.txt文件 /// /// public static string ExportToTxt(DataTable table, string path){string tempFileName = null;tempFileName = GetTempFileName();string filepath = path + tempFileName + CSVPOSTFIX;string filename = tempFileName + CSVPOSTFIX;System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.Create);System.IO.StreamWriter textFile = new System.IO.StreamWriter(fs, System.Text.Encoding.Unicode);//把Dataset中的数据写入.txt文件中 //统计dataset中当前表的行数 int row = table.Rows.Count;//统计dataset中当前表的列数 int column = table.Columns.Count;//把dataset中当前表的字段名写入.txt文件中 for (int i = 0; i < column; i++){if (i < column - 1)textFile.Write(table.Columns[i].ColumnName.ToString().Replace("\r\n", " ").Replace("\t", " ") + "\t");elsetextFile.Write(table.Columns[i].ColumnName.ToString().Replace("\r\n", " ").Replace("\t", " ") + "\n");}//把dataset中当前表的数据写入.txt文件中 for (int i = 0; i < row; i++){for (int j = 0; j < column; j++){if (j < column - 1)textFile.Write(table.Rows[i][j].ToString().Replace("\r\n", " ").Replace("\t", " ") + "\t");elsetextFile.Write(table.Rows[i][j].ToString().Replace("\r\n", " ").Replace("\t", " ") + "\n");}}//关闭当前的StreamWriter流 textFile.Close();return filename;}public static string GetTempFileName(){return DateTime.Now.ToString("yyyyMMddhhmmssfff");}
其中create对应的类为
#region 程序集 mscorlib.dll, v2.0.0.0 // C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll #endregionusing System; using System.Runtime.InteropServices;namespace System.IO {// 摘要:// 指定操作系统打开文件的方式。 [Serializable][ComVisible(true)]public enum FileMode{// 摘要:// 指定操作系统应创建新文件。此操作需要 System.Security.Permissions.FileIOPermissionAccess.Write。如果文件已存在,则将引发// System.IO.IOException。CreateNew = 1,//// 摘要:// 指定操作系统应创建新文件。如果文件已存在,它将被覆盖。这要求 System.Security.Permissions.FileIOPermissionAccess.Write。System.IO.FileMode.Create// 等效于这样的请求:如果文件不存在,则使用 System.IO.FileMode.CreateNew;否则使用 System.IO.FileMode.Truncate。Create = 2,//// 摘要:// 指定操作系统应打开现有文件。打开文件的能力取决于 System.IO.FileAccess 所指定的值。如果该文件不存在,则引发 System.IO.FileNotFoundException。Open = 3,//// 摘要:// 指定操作系统应打开文件(如果文件存在);否则,应创建新文件。如果用 FileAccess.Read 打开文件,则需要 System.Security.Permissions.FileIOPermissionAccess.Read。如果文件访问为// FileAccess.Write,则需要 System.Security.Permissions.FileIOPermissionAccess.Write。如果用// FileAccess.ReadWrite 打开文件,则同时需要 System.Security.Permissions.FileIOPermissionAccess.Read// 和 System.Security.Permissions.FileIOPermissionAccess.Write。 如果文件访问为 FileAccess.Append,则需要// System.Security.Permissions.FileIOPermissionAccess.Append。OpenOrCreate = 4,//// 摘要:// 指定操作系统应打开现有文件。文件一旦打开,就将被截断为零字节大小。此操作需要 System.Security.Permissions.FileIOPermissionAccess.Write。试图从使用// Truncate 打开的文件中进行读取将导致异常。Truncate = 5,//// 摘要:// 打开现有文件并查找到文件尾,或创建新文件。FileMode.Append 只能同 FileAccess.Write 一起使用。试图查找文件尾之前的位置时会引发// System.IO.IOException,并且任何试图读取的操作都会失败并引发 System.NotSupportedException。Append = 6,} }
转载于:https://www.cnblogs.com/sunping177/p/6521999.html