[C#]DataGrid控件和DateSet集合生成csv文件的代码

来源:互联网 发布:如何学数据库管理系统 编辑:程序博客网 时间:2024/05/01 16:45



using System;
using System.Web;
using System.IO;
using System.Text;
using System.Data;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.Odbc;
using System.Data.OleDb;
using System.IO.Packaging;
using System.Collections.Generic; 



        /// <summary>
        /// DateSet生成csv文件的标准函数
        /// </summary>
        /// <param name="page">当前页</param>
        /// <param name="ds">DataSet集合</param>
        /// <param name="sFileName">名称</param>
        /// <returns></returns>
        public static string ExportDsToCsvFile(System.Web.UI.Page page, DataSet ds,string sFileName)
        {
            StreamWriter sw;
            string sUrl;
            string LineStr = "";
            string sFile;


            
            /
            sUrl = "../zs/uploadfiles/temp/";
            string a = page.Server.MapPath(sUrl);
            if (!Directory.Exists(page.Server.MapPath(sUrl)))
                Directory.CreateDirectory(page.Server.MapPath(sUrl));
            //创建新文件
            sUrl += sFileName + ".csv";
            sFile = page.Server.MapPath(sUrl);
            sw = new StreamWriter(sFile, false, System.Text.Encoding.Default);//创建新文件图标
              




            //string data = "";
            //foreach (DataTable tb in ds.Tables)
            //{
            //    data += tb.TableName + "n";


            //    //写出列名
            //    foreach (DataColumn column in tb.Columns)
            //    {
            //        data += column.ColumnName + ",";
            //    }
            //    data += "n";


            //    //写出数据
            //    foreach (DataRow row in tb.Rows)
            //    {
            //        foreach (DataColumn column in tb.Columns)
            //        {
            //            data += row[column].ToString() + ",";
            //        }
            //        data += "n";
            //    }
            //    data += "n";
            //}


            int i, j;


            //写入标题
            for (j = 0; j < ds.Tables[0].Columns.Count; j++)
            {
                LineStr += ds.Tables[0].Columns[j].ToString() + ",";
            }
            LineStr = LineStr.Substring(0, LineStr.Length - 1);
            sw.WriteLine(LineStr);


            //写入内容
            for (i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                LineStr = "";
                for (j = 0; j < ds.Tables[0].Columns.Count; j++)
                {
                    LineStr += ts.StringToAlert(ds.Tables[0].Rows[i][j].ToString().Replace(",", " ")) + ",";
                }
                LineStr = LineStr.Substring(0, LineStr.Length - 1);
                //WriteLine ,分隔符号
                sw.WriteLine(LineStr);
            }
            sw.Close();
            long ImageSize;
            byte[] ImageBuffer;
            ImageSize = (new System.IO.FileInfo(sFile)).Length;
            //创建一文件流对象
            FileStream fs = new FileStream(sFile, FileMode.OpenOrCreate);
            //基于文件流创建二进制读
            BinaryReader r = new BinaryReader(fs);
            //指到文件的开头位置
            r.BaseStream.Seek(0, SeekOrigin.Begin);
            ImageBuffer = r.ReadBytes(Int32.Parse(ImageSize.ToString()));
            string[] sf1 = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(sFileName)).Split(new Char[] { '\\' });
            sFileName = sf1[sf1.Length - 1] + ".csv";
            page.Response.Clear();
            page.Response.ContentType = "application/ms-excel";
            page.Response.AddHeader("Content-Disposition", "attachment;filename=" + sFileName);
            page.Response.BinaryWrite(ImageBuffer);
            fs.Close();
            page.Response.End();
            return sUrl;
        } 



         /// <summary>
        /// DataGrid生成csv文件的标准函数
        /// </summary>
        /// <param name="page">当前页</param>
        /// <param name="dgdData">DataGrid的ID名</param>
        /// <param name="iFromCol">开始列</param>
        /// <param name="iToCol">结束列</param>
        /// <param name="sFileName">名称</param>
        /// <returns></returns>
public static string ExportDvToCsvFile(System.Web.UI.Page page,DataGrid dgdData,int iFromCol,int iToCol,string sFileName)

StreamWriter sw;
string sUrl;
string LineStr="";
string sFile;
 
//设置datagrid不分页以能导出全部数据
bool bAllowPage= dgdData.AllowPaging;
if (dgdData.AllowPaging)
{
dgdData.AllowPaging=false;
dgdData.DataBind();
}

          
                        sUrl = "../zs/uploadfiles/temp/";
string a=page.Server.MapPath(sUrl);
if (!Directory.Exists(page.Server.MapPath(sUrl)))
Directory.CreateDirectory(page.Server.MapPath(sUrl));
//创建新文件
sUrl += sFileName+".csv";
sFile = page.Server.MapPath(sUrl);
sw = new StreamWriter(sFile,false,System.Text.Encoding.Default);//创建新文件图标
    


int i,j;
 
//写入标题
for (j=iFromCol;j<=iToCol;j++)
{
LineStr += dgdData.Columns[j].HeaderText+",";
}
LineStr = LineStr.Substring(0,LineStr.Length-1);
sw.WriteLine (LineStr);


//写入内容
for (i=0;i<dgdData.Items.Count;i++)
{
LineStr = "";
for (j=iFromCol;j<=iToCol;j++)
{
if (dgdData.Items[i].Cells[j].Text!="&nbsp;")
{
LineStr +=ts.StringToAlert(dgdData.Items[i].Cells[j].Text.Replace(","," "))+",";
}
else
{
LineStr +=" ,";
}
}
LineStr = LineStr.Substring(0,LineStr.Length-1);
//WriteLine ,分隔符号
sw.WriteLine  (LineStr);
}
sw.Close();
            long ImageSize;
            byte[] ImageBuffer;
            ImageSize = (new System.IO.FileInfo(sFile)).Length;
            //创建一文件流对象
            FileStream fs = new FileStream(sFile, FileMode.OpenOrCreate);
            //基于文件流创建二进制读
            BinaryReader r = new BinaryReader(fs);
            //指到文件的开头位置
            r.BaseStream.Seek(0, SeekOrigin.Begin);
            ImageBuffer = r.ReadBytes(Int32.Parse(ImageSize.ToString()));


            string[] sf1 = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(sFileName)).Split(new Char[] { '\\' });


            sFileName = sf1[sf1.Length - 1]+".csv";


            page.Response.Clear();
            page.Response.ContentType = "application/ms-excel"; 
            page.Response.AddHeader("Content-Disposition", "attachment;filename=" + sFileName);
            page.Response.BinaryWrite(ImageBuffer);
            fs.Close();
            page.Response.End();


if (bAllowPage)
{
dgdData.AllowPaging = true;
dgdData.DataBind();

return sUrl;




//导出信息

              protected void lnkToExcel_Click(object sender, System.EventArgs e)
{

                   DataSet ds=GetDataSet();//根据情况查询到的DataSet集合
                  Response.Write(PageCtrl.ExportDsToCsvFile(this, ds, "xxxxx表"));

}

0 0
原创粉丝点击