当我点击显示时为什么总是替换第一个数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当我点击显示时为什么总是替换第一个数据?相关的知识,希望对你有一定的参考价值。

我的系统有点问题,这是我的问题,当我插入数据,数据将显示在DatagridView,现在,如果我再次插入不同的数据,DatagridView中的第一个数据将删除,将被第二个数据替换。听起来很简单,但我已经尝试了一切,复制我的相同代码,搜索到互联网,但仍然遇到了同样的问题。

而且我还使用Breakpoint来查看代码的去向以及触发的内容。

到目前为止这是我的代码。

 If TxtRod_ID.Text = "" Then MsgBox("Please enter RD Code.") : Exit Sub
    If rbRD.Checked = False And rbOSS.Checked = False Then MsgBox("Please select User On.") : Exit Sub

    Dim cn As New OleDbConnection
    Dim strUser As String = ""
    Dim cmd As OleDbCommand
    Dim dr As OleDbDataReader

    If rbRD.Checked = True Then
        RoDID = TxtRod_ID.Text
        RdGetSrvr()
        cn = New OleDbConnection(RDcon)
        Try
            If cn.State = ConnectionState.Closed Then cn.Open()
        Catch ex As Exception
            MessageBox.Show("Cannot connect to the database. Please contact the administrator.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
        If rbUserName.Checked = True Then
            If txtFname.Text.Trim() = "" And txtLname.Text.Trim() = "" Then MsgBox("Please enter First and/or Last Name of User.") : Exit Sub
            strUser = "select * from USERS..MS_User where First_Name like '%" & txtFname.Text.Trim() & "%' and Last_Name like '%" & txtLname.Text.Trim() & "%'"

        ElseIf rbUserId.Checked = True Then
            If txtUserID.Text.Trim() = "" Then MsgBox("Please enter User ID.") : Exit Sub
            strUser = "select  * from USERS..MS_User where User_ID like '%" & txtUserID.Text.Trim() & "%'"

        End If
    Else
        If rbUserId.Checked = True Then
            If txtUserID.Text.Trim() = "" Then MsgBox("Please enter User ID.") : Exit Sub

            COGetSrvr()
            cn = New OleDbConnection(COcon)
            cn.Open()
            strUser = "select * from objUsr..user_locked_tbl where UserName like '%" & txtUserID.Text.Trim() & "%'"

        End If
    End If

    cmd = New OleDbCommand(strUser, cn)

    dr = cmd.ExecuteReader()
    Dim ctr As Integer = 0
    If dr.HasRows Then
        While dr.Read
            dgUser.Rows.Add()
            If rbRD.Checked = True Then
                dgUser("dgUserID1", ctr).Value = dr("User_ID")
                dgUser("dgFname1", ctr).Value = dr("First_Name")
                dgUser("dgLname1", ctr).Value = dr("Last_Name")
                dgUser("dgPrimaryRole1", ctr).Value = dr("Primary_Role")
                dgUser("dgUserStatus1", ctr).Value = dr("User_Status")
                dgUser("dgULoginCnt1", ctr).Value = dr("Unsuccessful_Login_Count")
                dgUser("dgDesig1", ctr).Value = dr("Designation")
            Else
                dgUser("dgUserID1", ctr).Value = dr("UserName")
                dgUser("dgFname1", ctr).Value = ""
                dgUser("dgLname1", ctr).Value = ""
                dgUser("dgPrimaryRole1", ctr).Value = ""
                dgUser("dgUserStatus1", ctr).Value = ""
                dgUser("dgULoginCnt1", ctr).Value = ""
                dgUser("dgDesig1", ctr).Value = ""
            End If
        End While
    Else
        MsgBox("No record found.")
        Exit Sub
    End If
End Sub

当我添加数据并单击按钮显示按钮。结果还可以。

Result 1

现在,如果我再次添加数据。第一个数据将删除并替换为第二个数据。

Result 2

正如你在结果2中看到的那样,有一个空白的row,当我把它插入我的代码,dgUser.Rows.Clear,当然空白的row将删除,但我有同样的问题。

我想实现的是,如果我插入第一个数据,插入第二个数据时就不会删除它。

答案

看起来循环中的标志“ctr”没有改变。它是关于放置结果的行号,那么所有结果都会转到同一个地方吗?

另一答案
  Dim ctr As Integer = 0
    If dr.HasRows Then
        While dr.Read
            For ctr = 0 To dgUser.Rows.Count - 1
            Next
            dgUser.Rows.Add()
            If rbRD.Checked = True Then
                dgUser("dgUserID", ctr).Value = If(IsDBNull(dr("User_ID")) = True, "", dr("User_ID"))
                dgUser("dgFname", ctr).Value = If(IsDBNull(dr("First_Name")) = True, "", dr("First_Name"))
                dgUser("dgLname", ctr).Value = If(IsDBNull(dr("Last_Name")) = True, "", dr("Last_Name"))
                dgUser("dgPrimaryRole", ctr).Value = If(IsDBNull(dr("Primary_Role")) = True, "", dr("Primary_Role"))
                dgUser("dgUserStatus", ctr).Value = If(IsDBNull(dr("User_Status")) = True, "", dr("User_Status"))
                dgUser("dgULoginCnt", ctr).Value = If(IsDBNull(dr("Unsuccessful_Login_Count")) = True, "", dr("Unsuccessful_Login_Count"))
                dgUser("dgDesig", ctr).Value = If(IsDBNull(dr("Designation")) = True, "", dr("Designation"))
            Else
                dgUser("dgUserID", ctr).Value = If(IsDBNull(dr("UserName")) = True, "", dr("UserName"))
                dgUser("dgFname", ctr).Value = ""
                dgUser("dgLname", ctr).Value = ""
                dgUser("dgPrimaryRole", ctr).Value = ""
                dgUser("dgUserStatus", ctr).Value = ""
                dgUser("dgULoginCnt", ctr).Value = ""
                dgUser("dgDesig", ctr).Value = ""
            End If

            ctr += 1
        End While

我知道了。我忘了在我的代码中插入For Loop。谢谢@Terry D的想法。

以上是关于当我点击显示时为什么总是替换第一个数据?的主要内容,如果未能解决你的问题,请参考以下文章

基于String Array项,向下一个片段显示相同的项

选择导航菜单项时不会替换上一个片段

膨胀BottomSheetDialog时替换片段

当替换片段视频仍在android中播放背景时

如何在数据表的表格工具中用图标替换按钮?

Android - 通过 FragmentManager 替换片段后,片段返回到它们的第一个状态