http://www.cnblogs.com/wljcan/archive/2004/08/21/26940.aspx

解决方案 »

  1.   

    我写的DataGrid2Csv:using System;
    using System.Data;
    using System.IO;
    using System.Text;
    using System.Web.UI;
    using System.Web.UI.WebControls;namespace AspNetStudy
    {
    /// <summary>
    /// DataGrid工具集
    /// </summary>
    public class DataGridTools
    {
    #region ToCsvString
    public static string ToCsvString(DataGrid dg)
    {
    StringBuilder sb = new StringBuilder(512); // 写出列名
    if(dg.Columns.Count > 0)
    {
    foreach(DataGridColumn column in dg.Columns)
    {
    sb.AppendFormat("{0},",Format(column.HeaderText));
    }
    sb.Remove(sb.Length - 1,1);
    sb.Append(Environment.NewLine);
    }
    else if(dg.DataSource is IDataReader)
    {
    IDataReader dr = (IDataReader)dg.DataSource;
    if(dr.IsClosed)
    {
    goto GetItems;
    }
    for(int i = 0;i < dr.FieldCount;i++)
    {
    sb.AppendFormat("{0},",Format(dr.GetName(i)));
    }
    if(dr.FieldCount > 0)
    {
    sb.Remove(sb.Length - 1,1);
    }
    sb.Append(Environment.NewLine);
    }
    else
    {
    DataTable dt;
    if(dg.DataSource is DataTable)
    {
    dt = (DataTable)dg.DataSource;
    }
    else if(dg.DataSource is DataSet)
    {
    dt = ((DataSet)dg.DataSource).Tables[0];
    }
    else
    {
    goto GetItems;
    }
    foreach(DataColumn dc in dt.Columns)
    {
    sb.AppendFormat("{0},",Format(dc.ColumnName));
    }
    if(dt.Columns.Count > 0)
    {
    sb.Remove(sb.Length - 1,1);
    }
    sb.Append(Environment.NewLine);
    } // 写出数据
    GetItems: 
    foreach(DataGridItem row in dg.Items)
    {
    foreach(TableCell cell in row.Cells)
    {
    sb.AppendFormat("{0},",Format(cell.Text));
    }
    if(row.Cells.Count > 0)
    {
    sb.Remove(sb.Length - 1,1);
    }
    sb.Append(Environment.NewLine);
    }
    if(dg.Items.Count > 0)
    {
    sb.Remove(sb.Length - Environment.NewLine.Length,Environment.NewLine.Length);
    } return sb.ToString();
    } private static string Format(string s)
    {
    bool hasComma = false;
    bool hasQuote = false;
    if(s.IndexOf(",") != -1)
    {
    hasComma = true;
    }
    if(s.IndexOf("\"") != -1)
    {
    hasQuote = true;
    }
    if(hasComma || hasQuote)
    {
    if(hasQuote)
    {
    s = s.Replace("\"","\"\"");
    }
    return string.Format("{0}{1}{0}","\"",s);
    }
    else
    {
    return s;
    }
    }
    #endregion ToCsvString #region ToHtmlString
    public static string ToHtmlString(DataGrid dg)
    {
    StringBuilder sb = new StringBuilder(512);
    dg.RenderControl(new HtmlTextWriter(new StringWriter(sb)));
    return sb.ToString();
    }
    #endregion ToHtmlString
    }
    }
      

  2.   

    VB.NET版本:Imports System
    Imports System.Data
    Imports System.IO
    Imports System.Text
    Imports System.Web.UI
    Imports System.Web.UI.WebControls
     
    Namespace AspNetStudy
    '/ <summary>
    '/ DataGrid工具集
    '/ </summary>
    Public Class DataGridTools
    #Region "ToCsvString"
    Public Shared Function ToCsvString(ByVal dg As DataGrid) As String
    Dim sb As StringBuilder =  New StringBuilder(512) 
     
    ' 写出列名
    If dg.Columns.Count > 0 Then
    Dim column As DataGridColumn
    For Each column In dg.Columns
    sb.AppendFormat("{0},",Format(column.HeaderText))
    Next
    sb.Remove(sb.Length - 1,1)
    sb.Append(Environment.NewLine)
    Else If TypeOf dg.DataSource Is IDataReader Then 
    Dim dr As IDataReader = CType(dg.DataSource, IDataReader)
    If dr.IsClosed Then
    Dim GetItems As GoTo
    End If
    Dim i As Integer
    For  i = 0 To  dr.FieldCount- 1  Step i + 1
    sb.AppendFormat("{0},",Format(dr.GetName(i)))
    Next
    If dr.FieldCount > 0 Then
    sb.Remove(sb.Length - 1,1)
    End If
    sb.Append(Environment.NewLine)
    Else 
    Dim dt As DataTable
    If TypeOf dg.DataSource Is DataTable Then
    dt = CType(dg.DataSource, DataTable)
    Else If TypeOf dg.DataSource Is DataSet Then 
    dt = (CType(dg.DataSource, DataSet)).Tables(0)
    Else 
    Dim GetItems As GoTo
    End If
    Dim dc As DataColumn
    For Each dc In dt.Columns
    sb.AppendFormat("{0},",Format(dc.ColumnName))
    Next
    If dt.Columns.Count > 0 Then
    sb.Remove(sb.Length - 1,1)
    End If
    sb.Append(Environment.NewLine)
    End If
     
    ' 写出数据
    GetItems: 
    Dim row As DataGridItem
    For Each row In dg.Items
    Dim cell As TableCell
    For Each cell In row.Cells
    sb.AppendFormat("{0},",Format(cell.Text))
    Next
    If row.Cells.Count > 0 Then
    sb.Remove(sb.Length - 1,1)
    End If
    sb.Append(Environment.NewLine)
    Next
    If dg.Items.Count > 0 Then
    sb.Remove(sb.Length - Environment.NewLine.Length,Environment.NewLine.Length)
    End If
     
    Return sb.ToString()
    End Function
     
    Private Shared Function Format(ByVal s As String) As String
    Dim hasComma As Boolean =  False 
    Dim hasQuote As Boolean =  False 
    If s.IndexOf(",") <> -1 Then
    hasComma = True
    End If
    If s.IndexOf("\"") <> -1 Then
    hasQuote = True
    End If
    If hasComma Or hasQuote Then
    If hasQuote Then
    s = s.Replace("\"","\"\"")
    End If
    Return String.Format("{0}{1}{0}","\"",s)
    Else 
    Return s
    End If
    End Function
    #End Region ToCsvString
     
    #Region "ToHtmlString"
    Public Shared Function ToHtmlString(ByVal dg As DataGrid) As String
    Dim sb As StringBuilder =  New StringBuilder(512) 
    dg.RenderControl(New HtmlTextWriter(New StringWriter(sb)))
    Return sb.ToString()
    End Function
    #End Region ToHtmlString
    End Class
    End Namespace
      

  3.   

    Dim GetItems As GoTo -> GoTo GetItems