0

いくつかのものをロードするリピーターがあります。リピーターのすべてのコンテンツを削除する SQL コマンドを含むボタンもありますが、残念ながら、ユーザーが「削除」ボタンを押した後にページをリロードすると、アイテムはまだそこにあります。

ページロードサブに対して次のようなことを試しました:

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If IsPostBack Then
                bookShelfContainer.DataSource = Nothing
                Exit Sub
            End If
displayUserBooks()
    End Sub

そして、ここにリピーターのサブがあります:

 Sub displayUserBooks()
        Dim conn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
        Dim cmd As OleDbCommand = New OleDbCommand()
        cmd.Connection = conn
        conn.Open()
        Session("currentuser") = User.Identity.Name
        cmd.Parameters.AddWithValue("@currentUser", Session("currentuser"))
        cmd.CommandText = String.Format("SELECT TOP 6 booklist.ID, booklist.Title, booklist.Author, booklist.imgurl, bookshelfjunction.BookID FROM booklist INNER JOIN bookshelfjunction ON bookshelfjunction.BookID = booklist.ID WHERE bookshelfjunction.UserName = @currentUser")
        bookShelfContainer.DataSource = cmd.ExecuteReader()
        bookShelfContainer.DataBind()
        conn.Close()
    End Sub

必要な場合に備えて、削除機能:

Protected Sub btnClearBookshelf()
        Dim conn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
        Dim cmd As OleDbCommand = New OleDbCommand()
        cmd.Connection = conn
        conn.Open()
        Session("currentuser") = User.Identity.Name
        cmd.Parameters.AddWithValue("@currentUser", Session("currentuser"))
        cmd.CommandText = String.Format("DELETE FROM bookshelfjunction WHERE bookshelfjunction.UserName = @currentUser")
        cmd.ExecuteNonQuery()
        conn.Close()
    End Sub

リピーターが確実にデータバインドされるようにするには、Page_Load If IsPostBack 評価に何を書き込む必要がありますか?

4

1 に答える 1

1

Repeater コントロールのデータセットではなく、データベースでのみ更新を行っているため、更新が表示されません。バインドした DataSet を保持しており、新しいデータで更新していません。

Protected Sub btnClearBookshelf()
    Dim conn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
    Dim cmd As OleDbCommand = New OleDbCommand()
    cmd.Connection = conn
    conn.Open()
    Session("currentuser") = User.Identity.Name
    cmd.Parameters.AddWithValue("@currentUser", Session("currentuser"))
    cmd.CommandText = String.Format("DELETE FROM bookshelfjunction WHERE bookshelfjunction.UserName = @currentUser")
    cmd.ExecuteNonQuery()
    conn.Close()

    displayUserBooks()

End Sub

そのため、データを再取得してアプリに更新を認識させ、その新しいデータセットを Repeater にバインドして新しいデータを表示する必要があります。イベントが原因でそれが起こると思っていた場合は、イベント ハンドラーが Page_Load の後に実行されることに注意してください。

于 2013-05-03T19:39:07.520 に答える