首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

【谋求解决方案】将用户定单详细信息存到服务器的里面,调出打印

2011-12-23 
【寻求解决方案】将用户定单详细信息存到服务器的里面,调出打印每个用户都有一个文件夹,现在需要把数据库里

【寻求解决方案】将用户定单详细信息存到服务器的里面,调出打印
每个用户都有一个文件夹,现在需要把数据库里面的很多信息存到一个记事本或者Word文档里面,管理员可以从服务器雕出这个文件夹,然后打印出来;
现在问题是如何用程序生成一个记事本或者Word文件???
或者有更好的解决方案,大家可以告诉我!
拜托了!!

[解决办法]
public static void SqlDataToExcel ( Page page, string strSql, string TableName, string ObjectName, string sqlconn )
{
HttpResponse resp;
string colHeaders = " ", ls_item = " ";
resp = page.Response;
string filename = ObjectName+ ".word ";
resp.ContentEncoding = System.Text.Encoding.GetEncoding ( "GB2312 " );
resp.AppendHeader ( "Content-Disposition ", "attachment;filename= " + System.Web.HttpUtility.UrlEncode(filename,System.Text.Encoding.UTF8));
resp.ContentType = "text/word ";

#region Excel
DataSet ds = new DataSet ( );
SqlDataAdapter Adapter = new SqlDataAdapter ( strSql, sqlconn );
Adapter.Fill ( ds, TableName);
int i, j;
/*定义表对象与行对像,同时用DataSet对其值进行初始化*/
DataTable dt = ds.Tables[ 0 ];
DataRow[ ] myRow = dt.Select ( " " );
/*取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符*/
for (i = 0 ; i < dt.Columns.Count - 1 ; i++)
colHeaders += dt.Columns[ i ].Caption.ToString ( ) + "\t ";
colHeaders += dt.Columns[ i ].Caption.ToString ( ) + "\n ";
/*向HTTP输出流中写入取得的数据信息*/
resp.Write ( colHeaders );
/*逐行处理数据*/
foreach (DataRow row in myRow)
{
//在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n
for (i = 0 ; i < row.Table.Columns.Count - 1 ; i++)
ls_item += row[ i ].ToString ( ) + "\t ";
ls_item += row[ i ].ToString ( ) + "\n ";
/*当前行数据写入HTTP输出流,并且置空ls_item以便下行数据*/
resp.Write ( ls_item );
ls_item = " ";
}
#endregion
resp.Flush ( );
resp.End ( );
}
[解决办法]
/// <summary>
/// SmartGridView类的属性部分
/// </summary>
public partial class SmartGridView
{
/// <summary>
/// 导出SmartGridView的数据源的数据
/// </summary>
/// <param name= "fileName "> 文件名 </param>
/// <param name= "exportFormat "> 导出文件的格式 </param>
/// <param name= "encoding "> 编码 </param>
public void Export(string fileName, ExportFormat exportFormat, Encoding encoding)
{
DataTable dt = null;

if (this._dataSourceObject is DataTable)
dt = (DataTable)this._dataSourceObject;
else if (this._dataSourceObject is DataSet)
dt = ((DataSet)this._dataSourceObject).Tables[0];
else
throw new InvalidCastException( "若要导出SmartGridView,应保证其数据源为DataTable或DataSet类型 ");

if (dt == null)
throw new ArgumentNullException( "数据源 ", "数据源不能为NULL ");

Helper.Common.Export(dt, exportFormat, fileName, encoding);
}

/// <summary>
/// 导出SmartGridView的数据源的数据
/// </summary>
/// <param name= "fileName "> 文件名 </param>
/// <param name= "exportFormat "> 导出文件的格式 </param>
public void Export(string fileName, ExportFormat exportFormat)
{


Export(fileName, exportFormat, Encoding.GetEncoding( "GB2312 "));
}

/// <summary>
/// 导出SmartGridView的数据源的数据为Excel
/// </summary>
/// <param name= "fileName "> 文件名 </param>
public void Export(string fileName)
{
Export(fileName, ExportFormat.CSV);
}
[解决办法]
using System;
using System.Collections.Generic;
using System.Text;

using System.Xml;
using System.Xml.Xsl;
using System.Web;
using System.Data;
using System.IO;

namespace YYControls.Helper
{
/// <summary>
/// 常用Helper
/// </summary>
public partial class Common
{
/// <summary>
/// 导出为Excel
/// </summary>
/// <param name= "dt "> 数据源 </param>
/// <param name= "exportFormat "> 导出文件的格式 </param>
/// <param name= "fileName "> 输出文件名 </param>
/// <param name= "encoding "> 编码 </param>
public static void Export(DataTable dt, ExportFormat exportFormat, string fileName, Encoding encoding)
{
DataSet dsExport = new DataSet( "Export ");
DataTable dtExport = dt.Copy();

dtExport.TableName = "Values ";
dsExport.Tables.Add(dtExport);

string[] headers = new string[dtExport.Columns.Count];
string[] fields = new string[dtExport.Columns.Count];

for (int i = 0; i < dtExport.Columns.Count; i++)
{
headers[i] = dtExport.Columns[i].ColumnName;
fields[i] = ReplaceSpecialChars(dtExport.Columns[i].ColumnName);
}

Export(dsExport, headers, fields, exportFormat, fileName, encoding);
}

/// <summary>
/// 导出为Excel
/// </summary>
/// <param name= "dt "> 数据源 </param>
/// <param name= "columnIndexList "> 列索引集合 </param>
/// <param name= "exportFormat "> 导出文件的格式 </param>
/// <param name= "fileName "> 输出文件名 </param>
/// <param name= "encoding "> 编码 </param>
public static void Export(DataTable dt, int[] columnIndexList, ExportFormat exportFormat, string fileName, Encoding encoding)
{
DataSet dsExport = new DataSet( "Export ");
DataTable dtExport = dt.Copy();

dtExport.TableName = "Values ";
dsExport.Tables.Add(dtExport);

string[] headers = new string[columnIndexList.Length];
string[] fields = new string[columnIndexList.Length];

for (int i = 0; i < columnIndexList.Length; i++)
{
headers[i] = dtExport.Columns[columnIndexList[i]].ColumnName;
fields[i] = ReplaceSpecialChars(dtExport.Columns[columnIndexList[i]].ColumnName);
}

Export(dsExport, headers, fields, exportFormat, fileName, encoding);
}

/// <summary>
/// 导出为Excel
/// </summary>
/// <param name= "dt "> 数据源 </param>
/// <param name= "columnIndexList "> 列索引集合 </param>


/// <param name= "headers "> 字段数组 </param>
/// <param name= "exportFormat "> 导出文件的格式 </param>
/// <param name= "fileName "> 输出文件名 </param>
/// <param name= "encoding "> 编码 </param>
public static void Export(DataTable dt, int[] columnIndexList, string[] headers, ExportFormat exportFormat, string fileName, Encoding encoding)
{
DataSet dsExport = new DataSet( "Export ");
DataTable dtExport = dt.Copy();

dtExport.TableName = "Values ";
dsExport.Tables.Add(dtExport);

string[] fields = new string[columnIndexList.Length];

for (int i = 0; i < columnIndexList.Length; i++)
{
fields[i] = ReplaceSpecialChars(dtExport.Columns[columnIndexList[i]].ColumnName);
}

Export(dsExport, headers, fields, exportFormat, fileName, encoding);
}

/// <summary>
/// 导出为Excel
/// </summary>
/// <param name= "ds "> 数据源 </param>
/// <param name= "headers "> 表头数组 </param>
/// <param name= "fields "> 字段数组 </param>
/// <param name= "exportFormat "> 导出文件的格式 </param>
/// <param name= "fileName "> 输出文件名 </param>
/// <param name= "encoding "> 编码 </param>
private static void Export(DataSet ds, string[] headers, string[] fields, ExportFormat exportFormat, string fileName, Encoding encoding)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.ContentType = String.Format( "text/{0} ", exportFormat.ToString().ToLower());
HttpContext.Current.Response.AddHeader( "content-disposition ", String.Format( "attachment;filename={0}.{1} ", fileName, exportFormat.ToString().ToLower()));
HttpContext.Current.Response.ContentEncoding = encoding;

MemoryStream stream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(stream, encoding);

CreateStylesheet(writer, headers, fields, exportFormat);
writer.Flush();
stream.Seek(0, SeekOrigin.Begin);

XmlDataDocument xmlDoc = new XmlDataDocument(ds);
XslCompiledTransform xslTran = new XslCompiledTransform();
xslTran.Load(new XmlTextReader(stream));

System.IO.StringWriter sw = new System.IO.StringWriter();
xslTran.Transform(xmlDoc, null, sw);

HttpContext.Current.Response.Write(sw.ToString());
sw.Close();
writer.Close();
stream.Close();
HttpContext.Current.Response.End();
}

/// <summary>
/// 动态生成XSL,并写入XML流
/// </summary>
/// <param name= "writer "> XML流 </param>
/// <param name= "headers "> 表头数组 </param>
/// <param name= "fields "> 字段数组 </param>
/// <param name= "exportFormat "> 导出文件的格式 </param>
private static void CreateStylesheet(XmlTextWriter writer, string[] headers, string[] fields, ExportFormat exportFormat)
{
string ns = "http://www.w3.org/1999/XSL/Transform ";
writer.Formatting = Formatting.Indented;


writer.WriteStartDocument();
writer.WriteStartElement( "xsl ", "stylesheet ", ns);
writer.WriteAttributeString( "version ", "1.0 ");
writer.WriteStartElement( "xsl:output ");
writer.WriteAttributeString( "method ", "text ");
writer.WriteAttributeString( "version ", "4.0 ");
writer.WriteEndElement();

// xsl-template
writer.WriteStartElement( "xsl:template ");
writer.WriteAttributeString( "match ", "/ ");

// xsl:value-of for headers
for (int i = 0; i < headers.Length; i++)
{
writer.WriteString( "\ " ");
writer.WriteStartElement( "xsl:value-of ");
writer.WriteAttributeString( "select ", " ' " + headers[i] + " ' ");
writer.WriteEndElement(); // xsl:value-of
writer.WriteString( "\ " ");
if (i != fields.Length - 1) writer.WriteString((exportFormat == ExportFormat.CSV) ? ", " : " ");
}

// xsl:for-each
writer.WriteStartElement( "xsl:for-each ");
writer.WriteAttributeString( "select ", "Export/Values ");
writer.WriteString( "\r\n ");

// xsl:value-of for data fields
for (int i = 0; i < fields.Length; i++)
{
writer.WriteString( "\ " ");
writer.WriteStartElement( "xsl:value-of ");
writer.WriteAttributeString( "select ", fields[i]);
writer.WriteEndElement(); // xsl:value-of
writer.WriteString( "\ " ");
if (i != fields.Length - 1) writer.WriteString((exportFormat == ExportFormat.CSV) ? ", " : " ");
}

writer.WriteEndElement(); // xsl:for-each
writer.WriteEndElement(); // xsl-template
writer.WriteEndElement(); // xsl:stylesheet
}
}
}

[解决办法]
原理都是从数据库中导出相应的数据到dataset,再用流保存成word

热点排行