Asp.net 重构:Gridview导出到CSV文件
这些例程(vb.net)允许您将gridview转储到CSV,即使单元格中有模板控件。这很管用,但我对它不感兴趣 我应该做哪些改进?为什么Asp.net 重构:Gridview导出到CSV文件,asp.net,vb.net,gridview,refactoring,Asp.net,Vb.net,Gridview,Refactoring,这些例程(vb.net)允许您将gridview转储到CSV,即使单元格中有模板控件。这很管用,但我对它不感兴趣 我应该做哪些改进?为什么 Private Shared Function CsvFormatted(ByVal t As String) As String If t.Contains(",") Then t = """" + t + """" End If Return t.Replace("\ ", "") End Fu
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
- 除了不间断的空格外,您是否应该担心去掉其他HTML文本?你可以用李>
- 您的CsvFormatted例程可以针对空输入字符串进行修改—安全性几乎不需要任何成本
- 你需要通过考试吗?一些国家/地区使用分号作为CSV分隔符。您可能还需要将点或逗号作为十进制分隔符
- 我可能会将生成CSV字符串与发出HttpContext响应分离为单独的函数李>
- 我可能使用vbCrLf而不是vbCr&vbLf李>
- 除了不间断的空格外,您是否应该担心去掉其他HTML文本?你可以用李>
- 您的CsvFormatted例程可以针对空输入字符串进行修改—安全性几乎不需要任何成本
- 你需要通过考试吗?一些国家/地区使用分号作为CSV分隔符。您可能还需要将点或逗号作为十进制分隔符
- 我可能会将生成CSV字符串与发出HttpContext响应分离为单独的函数李>
- 我可能使用vbCrLf而不是vbCr&vbLf李>
我的主要建议是:创建一些好的单元测试,确保代码通过,然后忘记它,然后继续实现更多的功能。代码封装得相当好,因此如果您认为有必要,可以在将来轻松重构。btw,我如何让so编辑器识别Return t.Replace(“,”)?顺便问一下,我如何让so编辑器识别Return t.Replace(“,”)?