我对编程非常陌生,而且我在第一个vb.net编程任务的最后阶段,但我无法理解最后一部分。
该程序是一个带有数据库后端的小型地址簿,当我删除联系人记录时出现问题。 正在读取的数据记录基于联系人主键,当我删除联系人记录时,下一个联系人记录向上移动但是其下的每个记录都没有正确读取。
我有一种感觉,因为我的代码只按顺序读取主键,但我不确定如何更改它以使其正常工作。
这里是与我在列表视图中选择记录时读取数据相关的代码。
Private Sub ListView1_SelectedIndexChanged_1(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
Dim command As MySqlCommand = Nothing
Dim reader As MySqlDataReader
Dim query As String = "SELECT * FROM contacts WHERE id= '" & ListView1.FocusedItem.Index + 1 & "'"
Try
connection.Open()
command = New MySqlCommand(query, connection)
reader = command.ExecuteReader
While reader.Read
txtFirstName.Text = reader.GetString("first_name")
txtSurname.Text = reader.GetString("surname")
txtHouseNo.Text = reader.GetString("house_number")
txtStreet.Text = reader.GetString("street")
txtSuburb.Text = reader.GetString("suburb")
cboState.Text = reader.GetString("state")
txtPhone.Text = reader.GetString("phone")
txtMobile.Text = reader.GetString("mobile")
txtWork.Text = reader.GetString("work")
txtEmail.Text = reader.GetString("email")
txtNotes.Text = reader.GetString("notes")
txtid.Text = reader.GetString("id")
End While
Catch ex As MySqlException
MessageBox.Show(ex.Message)
Finally
connection.Close()
command.Dispose()
End Try
Call txtEnable()
End Sub
以下是我如何将联系人加载到listview
Private Sub loadcontacts()
Dim command As MySqlCommand = Nothing
Dim listquery As String = "SELECT * FROM contacts ORDER BY id"
Dim reader As MySqlDataReader = Nothing
Try
If connection.State = ConnectionState.Closed Then
connection.Open()
End If
command = New MySqlCommand(listquery, connection)
reader = command.ExecuteReader()
command.CommandText = listquery
With ListView1
.Columns.Add("Name", 220, HorizontalAlignment.Left)
End With
ListView with the data
While reader.Read
Dim ls As New ListViewItem(reader.Item("first_name").ToString() & " " & reader.Item("surname").ToString)
ListView1.Items.Add(ls)
End While
Catch ex As MySqlException
Finally
connection.Close()
command.Dispose()
End Try
End Sub
感谢您的帮助。
答案 0 :(得分:0)
删除记录后,请清除并重新加载列表。
答案 1 :(得分:0)
对于任何有类似问题的人,我都知道了。 史蒂夫帮助我走上了正确的轨道,谢谢你。 我添加了ID(主键)子项,如下所示:
While reader.Read
Dim ls As New ListViewItem(reader.Item("first_name").ToString() & " " & reader.Item("surname").ToString)
ls.SubItems.Add(reader.Item("id").ToString)
ListView1.Items.Add(ls)
然后在listview焦点项目中我做了这样的查询:
Dim query As String = "SELECT * FROM contacts WHERE id = '" & ListView1.FocusedItem.SubItems(1).Text & "'"
现在以正确的顺序保存,更新和删除主键ID读取的工作。感谢您的帮助,我希望这有助于将来的某个人