1
이러한 루틴 (vb.net)을 사용하면 셀에 템플릿 컨트롤이있는 경우에도 CSV에 대한 Gridview를 덤프 할 수 있습니다. 그것은 작동하지만, 나는 그것에 흥분하지 않습니다.리팩토링 : 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 편집기에서 Return t.Replace (" ", "")를 인식 할 수 있습니까? – BenB