1
這些例程(vb.net)允許您將gridview轉儲爲CSV,即使單元中存在模板控件。它的工作原理,但我並不滿意。重構:Gridview導出爲CSV文件
我應該做什麼改進,爲什麼?
Private Shared Function CsvFormatted(ByVal t As String) As String
If t.Contains(",") Then
t = """" + t + """"
End If
Return t.Replace("\ ", "")
End Function
Private Shared Function GetCellText(ByVal cell As DataControlFieldCell) As String
If cell.Controls.Count = 0 Then
Return CsvFormatted(cell.Text)
Else
For Each current In cell.Controls
If TypeOf current Is Label Then
Return CsvFormatted(TryCast(current, Label).Text)
ElseIf TypeOf current Is TextBox Then
Return CsvFormatted(TryCast(current, TextBox).Text)
ElseIf TypeOf current Is LinkButton Then
Return CsvFormatted(TryCast(current, LinkButton).Text)
ElseIf TypeOf current Is ImageButton Then
Return CsvFormatted(TryCast(current, ImageButton).AlternateText)
ElseIf TypeOf current Is HyperLink Then
Return CsvFormatted(TryCast(current, HyperLink).Text)
ElseIf TypeOf current Is DropDownList Then
Return CsvFormatted(TryCast(current, DropDownList).SelectedItem.Text)
ElseIf TypeOf current Is CheckBox Then
Return CsvFormatted(If(TryCast(current, CheckBox).Checked, "True", "False"))
End If
Next
End If
Return ""
End Function
Public Shared Sub ExportGridViewToCSV(ByVal grid As GridView, ByVal fileName As String)
HttpContext.Current.Response.Clear()
HttpContext.Current.Response.Buffer = True
HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + fileName)
HttpContext.Current.Response.Charset = ""
HttpContext.Current.Response.ContentType = "application/text"
Dim sb As New StringBuilder()
For k As Integer = 0 To grid.Columns.Count - 1
grid.Columns(k).Visible = True
'add separator
sb.Append(grid.Columns(k).HeaderText + ","c)
Next
'append new line
sb.Append(vbCr & vbLf)
For i As Integer = 0 To grid.Rows.Count - 1
For k As Integer = 0 To grid.Columns.Count - 1
grid.Columns(k).Visible = True
'add separator
sb.Append(GetCellText(grid.Rows(i).Cells(k)) + ","c)
Next
'append new line
sb.Append(vbCr & vbLf)
Next
HttpContext.Current.Response.Output.Write(sb.ToString())
HttpContext.Current.Response.Flush()
HttpContext.Current.Response.End()
End Sub
btw,如何讓SO編輯器識別返回t.Replace(「 」,「」)? – BenB 2009-09-15 02:13:36