【问题标题】:GridView display duplicate data when page refresh ASP.NET VB页面刷新时GridView显示重复数据ASP.NET VB
【发布时间】:2015-09-07 18:05:33
【问题描述】:

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

注意事项:

  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 复制,因为我无法阻止用户使用刷新按钮

我需要帮助!

【问题讨论】:

  • 设置gridview的AutoGenerateColumn = false并检查。还有一件事,这里的重复数据是什么意思。重复的列或行?
  • 将自动生成列设置为 false 后,我的 gridview 消失了。
  • 复制数据意味着它在我的 Page_Load 中重复该过程
  • 你的gridview有记录吗?
  • 我在asp.net中添加gridview时,如果我没有使用数据适配器和数据集绑定它应该是空白的

标签: asp.net vb.net gridview


【解决方案1】:

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

【讨论】:

  • 它还在复制记录,我想我找到了答案
【解决方案2】:

我看看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 表“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

所以解决办法是:

访问数据库时始终使用“使用”。

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

【讨论】:

    【解决方案3】:

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

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 2012-02-17
      相关资源
      最近更新 更多