GridView 页面刷新时显示重复数据 ASP.NET VB

GridView display duplicate data when page refresh ASP.NET VB

ASP.NET 中的 GridView:

<div>
    <asp:Panel ID="Panel_listview" runat="server" Font-Names="Arial" HorizontalAlign="Center">
        <asp:GridView ID="gridview_book_info" runat="server"></asp:GridView>
    </asp:Panel>
</div>

Page_Load 在 VB:

Dim gridview_detail As String
    gridview_detail = "select * from book;"

    da = New MySqlDataAdapter(gridview_detail, cn)
    da.Fill(ds, "book")
    gridview_book_info.DataSource = ds
    gridview_book_info.DataBind()    

备注:

  1. cnMySQL 连接
  2. ds数据集

这是我的问题:

当我调试时,Page_Load被触发,gridviewmysql数据库获取数据并显示。示例:

ABCDE (header)
abcde

但是当我刷新页面时,gridview会变成这样:

ABCDE (header)
abcde
abcde

每当我刷新页面时,它都会从 mysql 数据库复制日期,我试过:

  1. 检查 IsPostBack 是否为真然后禁用数据检索。
  2. 在数据检索之前将数据源设置为 Nothing
  3. 检查 gridview 行数是否为零

我想知道的:

  1. IsPostBack 旁边的其他代码真正检查页面是否真的刷新,然后我可以阻止 gridview 再次从 mysql 数据库检索数据。
  2. 阻止 GridView 复制,因为我无法阻止用户使用刷新按钮

我需要帮助!

IsPostBack 表示发生了 post 返回服务器,而不是页面已刷新。

尝试检查 post 在数据绑定之前的页面加载方法中没有发生返回

If Not Page.IsPostBack Then
  Dim gridview_detail As String
    gridview_detail = "select * from book;"

    da = New MySqlDataAdapter(gridview_detail, cn)
    da.Fill(ds, "book")
    gridview_book_info.DataSource = ds
    gridview_book_info.DataBind()    
End If

我看看Here

我在Page_Load中使用的原始代码:

If Not Me.IsPostBack then
  Dim gridview_detail As String
  gridview_detail = "select * from book;"

  da = New MySqlDataAdapter(gridview_detail, cn)
  da.Fill(ds, "book")
  gridview_book_info.DataSource = ds
  gridview_book_info.DataBind()
End If

使用我在顶部声明的 public 模块:

Public ds As New DataSet()
Public connStr As String = "Server=localhost...."
Public cn As New MySqlConnection(connStr)

我在 Page_Load 中进行了更改,当我刷新页面时,它可以防止 mysql table "book" 中出现重复数据:

If Not Me.IsPostBack Then
    Using cn
        Using cmd = New MySqlCommand("SELECT * FROM book")
            Using da As New MySqlDataAdapter()
                cmd.Connection = cn
                da.SelectCommand = cmd
                Using ds As New DataSet()
                    da.Fill(ds)
                    gridview_book_info.DataSource = ds
                    gridview_book_info.DataBind()
                End Using
            End Using
        End Using
    End Using
End If

所以解法是:

访问数据库时总是使用"using"。

如果您对这个问题有更好的解释,请在下面评论为什么使用 "using"。

您需要使用 using 这个词,因为它是安全的并且值得推荐使用。

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
    Dim constr As String = ConfigurationManager.ConnectionStrings("yourConnectionString").ConnectionString
    Using con As New MySqlConnection(constr)
        Using cmd As New MySqlCommand("SELECT * FROM books")
            Using sda As New MySqlDataAdapter()
                cmd.Connection = con
                sda.SelectCommand = cmd
                Using dt As New DataTable()
                    sda.Fill(dt)
                    GridView1.DataSource = dt
                    GridView1.DataBind()
                End Using
            End Using
        End Using
    End Using
 End If  End Sub

完整文档。看看下面:-

http://www.aspsnippets.com/Articles/Connect-Bind-GridView-to-MySql-database-in-ASPNet-using-C-and-VBNet.aspx

希望对你有帮助