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

时间:2015-06-22 10:16:33

标签: asp.net vb.net gridview

这是我在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>

这是我在VB中的Page_Load

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()    

备注:

cn是mysqlconnection(“Server = localhost .......”)

ds是数据集

这是我的问题:

当我调试时,触发了Page_Load并且gridview从mysql数据库获取数据并显示它。例如:

ABCDE (header)
abcde

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

ABCDE (header)
abcde
abcde

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

  1. 检查 IsPostBack 是否为true,然后禁用数据检索。
  2. 在检索数据之前将数据源设置为Nothing
  3. 检查gridview行数是否为零
  4. 我想知道的事情:

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

3 个答案:

答案 0 :(得分:0)

IsPostBack 表示发回了服务器的帖子,而不是页面已刷新。

尝试在数据绑定

之前检查页面加载方法中是否未发生回发
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

答案 1 :(得分:0)

我看一下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 ds As New DataSet()
Public connStr As String = "Server=localhost...."
Public cn As New MySqlConnection(connStr)

我在Page_Load中做了更改,它防止了mysql表中的重复数据&#34; book&#34;当我刷新页面时:

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

所以解决方案是:

始终使用&#34;使用&#34;访问数据库时。

如果您对此问题有更好的解释,请在下面发表评论,说明为何使用&#34;使用&#34;。

答案 2 :(得分:0)

您需要使用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

希望能帮到你

相关问题