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
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
}
}
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