2

ストアド プロシージャを使用してコード ビハインドでデータバインドされたグリッドビューがあります。コードで Paging イベントも処理していますが、ページ番号をクリックすると、行が増える代わりに空のデータ テンプレートが表示され続けます。助言がありますか?

編集: ページ インデックスを変更した後、gv のデータ ソースを再バインドしています。

これが私のコードです-データソースが何であるかを決定するドロップダウンリストがあります:

Protected Sub ddlProjectForm_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlProjectForm.SelectedIndexChanged
    Dim strProjectFormID As String = Me.ddlProjectForm.SelectedValue
    Dim conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("Conn").ConnectionString)
    Dim cmd As New SqlCommand()
    Dim da As New SqlDataAdapter
    Dim ds As New DataSet

    If strProjectFormID <> "Select" Then
        Try
            Using conn
                conn.Open()

                With cmd
                    .Connection = conn
                    .CommandType = CommandType.StoredProcedure
                    .CommandText = "sp_GetAllFormData"
                    .Parameters.AddWithValue("@projectFormID", strProjectFormID)
                End With

                da.SelectCommand = cmd
                da.Fill(ds)

                Me.gvAllSentData.DataSource = ds.Tables(0)
                Me.gvAllSentData.DataBind()
                Me.gvAllSentData.Visible = True
            End Using
        Catch sqlEx As SqlException
            Dim newError As New ErrorLogger(Me.Page.Title, sqlEx.Message, Session("UserName"))
            newError.LogError()

            Trace.Write(sqlEx.Message)
            Me.lblBadFeedback.Visible = True
            Me.lblBadFeedback.Text = "We're sorry - an error has occurred.  It has been logged and will be reviewed by the site admin."
        Catch ex As Exception
            Dim newError As New ErrorLogger(Me.Page.Title, ex.Message, Session("UserName"))
            newError.LogError()

            Trace.Write(ex.Message)
            Me.lblBadFeedback.Visible = True
            Me.lblBadFeedback.Text = "We're sorry - an error has occurred.  It has been logged and will be reviewed by the site admin."
        End Try
    Else
        Me.gvAllSentData.DataSource = Nothing
        Me.gvAllSentData.Visible = False
    End If

End Sub

Protected Sub gvAllSentData_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvAllSentData.PageIndexChanging
    Me.gvAllSentData.PageIndex = e.NewPageIndex
    Me.gvAllSentData.DataBind()
End Sub
4

3 に答える 3

7

空のデータソースを再バインドしています。コードは次のようになります。

Protected Sub gvAllSentData_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvAllSentData.PageIndexChanging
    Me.gvAllSentData.PageIndex = e.NewPageIndex
    Me.gvAllSentData.DataSource = __The_Data_To_Bind__
    Me.gvAllSentData.DataBind()
End Sub
于 2009-02-23T21:47:00.403 に答える
0

ばかげているように聞こえますが、データバインディング コードをもう一度呼び出すことを覚えていますか? ページングが発生すると、ポストバックが行われ、GridView のデータソースが失われるため、GridView がページに基づいて適切なデータを読み込めるように、データを再度バインドする必要があります。

コード 8^D を最初に書き直したときに再データバインドすることを思い出す前に、2 回目または 3 回目の ASP.NET アプリを作成したと思います。

于 2009-02-23T21:45:58.113 に答える
0

データバインディングの問題のように聞こえます。ポストバック後にデータソースが空になっている可能性がありますか?

並べ替えのような他のイベントは機能しますか?

ポストバック後にコードのバインディング部分をステップスルーして、データがすべてそこにあることを確認できますか?

投稿できるコードはありますか?問題を追跡するために、機能していないコードの部分だけを含むテスト ハーネスを作成する必要があるかもしれません。

于 2009-02-23T21:49:39.510 に答える