3

この関数を使用して、グリッドビューからデータテーブルを作成しています。AutoGenerateColumns = False の Gridview で正常に動作し、バインドされたフィールドまたはテンプレート フィールドがあります。しかし、AutoGenerateColumn = True の Gridviews で使用すると、空の DataTable しか返されません。Gridview ビューステートが失われたか何かのようです。Gridview は、If Not IsPostback を使用して PageLoad にバインドされます。それを機能させるために他に何も考えられません。誰かが私を助けてくれることを願っています。

ありがとう、

Public Shared Function GridviewToDataTable(gv As GridView) As DataTable

    Dim dt As New DataTable

    For Each col As DataControlField In gv.Columns
        dt.Columns.Add(col.HeaderText)
    Next

    For Each row As GridViewRow In gv.Rows
        Dim nrow As DataRow = dt.NewRow
        Dim z As Integer = 0
        For Each col As DataControlField In gv.Columns
            nrow(z) = row.Cells(z).Text.Replace(" ", "")
            z += 1
        Next
        dt.Rows.Add(nrow)
    Next
    Return dt

End Function
4

1 に答える 1

4

上記の関数を少し変更します。自動生成の削除、編集、または選択ボタン フラグが設定されている場合、フィールドの値は 1 だけオフセットされます。次のコードはそれを説明しています。

Public Shared Function GridviewToDataTable(ByVal PassedGridView As GridView, ByRef Error_Message As String) As DataTable
    '-----------------------------------------------
    'Dim Tbl_StackSheets = New Data.DataTable

    'Tbl_StackSheets = ReportsCommonClass.GridviewToDataTable(StackSheetsGridView)

    '-----------------------------------------------

    Dim dt As New DataTable
    Dim ColInd As Integer = 0
    Dim ValOffset As Integer

    Try

        For Each col As DataControlField In PassedGridView.Columns
            dt.Columns.Add(col.HeaderText)
        Next


        If (PassedGridView.AutoGenerateDeleteButton Or PassedGridView.AutoGenerateEditButton Or PassedGridView.AutoGenerateSelectButton) Then
            ValOffset = 1
        Else
            ValOffset = 0
        End If


        For Each row As GridViewRow In PassedGridView.Rows
            Dim NewDataRow As DataRow = dt.NewRow

            ColInd = 0
            For Each col As DataControlField In PassedGridView.Columns
                NewDataRow(ColInd) = row.Cells(ColInd + ValOffset).Text.Replace(" ", "")
                ColInd += 1
            Next

            dt.Rows.Add(NewDataRow)
        Next

        Error_Message = Nothing

    Catch ex As Exception
        Error_Message = "GridviewToDataTable: " & ex.Message
    End Try


    Return dt


End Function
于 2014-09-22T18:41:23.260 に答える