Vb.net 将listview列中的文本显示到不同的文本框
这是我的密码Vb.net 将listview列中的文本显示到不同的文本框,vb.net,ms-access,Vb.net,Ms Access,这是我的密码 Module Module1 Public Conn As New ADODB.Connection Public rs As New ADODB.Recordset Public sql As String Public Function Connection() Conn = New ADODB.Connection Conn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source
Module Module1
Public Conn As New ADODB.Connection
Public rs As New ADODB.Recordset
Public sql As String
Public Function Connection()
Conn = New ADODB.Connection
Conn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & My.Application.Info.DirectoryPath & "\Database1.mdb"
Conn.Open()
End Function
将我的数据加载到ListView
Private Sub ApplicationDesignForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Connection()
sql = "Select * From App"
rs.Open(sql, Conn)
While Not rs.EOF
Dim item As ListViewItem = ListView1.Items.Add(rs.Fields("QRCode").Value)
item.SubItems.Add(rs.Fields("Category").Value)
item.SubItems.Add(rs.Fields("LastName").Value & ", " & rs.Fields("FirstName").Value & ", " & rs.Fields("MI").Value)
item.SubItems.Add(rs.Fields("Gender").Value)
item.SubItems.Add(rs.Fields("Address").Value)
ListView1.FullRowSelect = True
rs.MoveNext()
End While
Conn.Close()
将我的数据传输到文本框
If Not ListView1.SelectedItems.Count = 0 Then
txtqrCode.Text = ListView1.Items(ListView1.SelectedIndices(0)).Text
cbCategory.Text = ListView1.Items(ListView1.SelectedIndices(0)).SubItems(1).Text
txtFirstName.Text = ListView1.Items(ListView1.SelectedIndices(0)).SubItems(2).Text
cbGender.Text = ListView1.Items(ListView1.SelectedIndices(0)).SubItems(3).Text
txtAddress.Text = ListView1.Items(ListView1.SelectedIndices(0)).SubItems(4).Text
但问题是全名只存在于“名字”文本框中,而不被“姓氏”、“名字”和中间的首字母文本框分隔。我被卡住了,想把姓、名和中间名分开。非常感谢您的建议。
首先,我要检查首字母是否存在,如果不存在,则跳过多余的逗号
If rs.Fields("MI").Value & "" <> "" then
item.SubItems.Add(rs.Fields("LastName").Value & ", " & rs.Fields("FirstName").Value & ", " & rs.Fields("MI").Value)
else
item.SubItems.Add(rs.Fields("LastName").Value & ", " & rs.Fields("FirstName").Value)
end if
但是:断开字符串有一个问题。。。姓氏可能包含在其中。因此,使用此方法,您的文本框可能不包含正确的数据库值
因此,最好从其他地方获取值。或者直接从数据库再次读取,或者更好,在读取数据库时将它们存储到其他一些列表类型结构中
类似于
Private QR_Records As New List(Of QR_REcord)
Private Structure QR_Record
Public Code As String
Public Category As String
Public Name_Last As String
Public Name_First As String
Public Name_Initials As String
'etc
Public ReadOnly Property Name_Full() As String
Get
If Name_Initials.Length > 0 Then
Return (Name_Last & ", " & Name_First & ", " & Name_Initials)
Else
Return (Name_Last & ", " & Name_First)
End If
End Get
End Property
End Structure
然后从数据库读取器函数中构建它,并直接从所选列表索引中引用它
With QR_Records(ListView1.SelectedIndices(0))
....
Dim FullName as string = .Name_Full
....
End With
额外好处:使用此方法的附加好处是,您可以在中使用ListView,这将在有大量记录时为您提供更好的性能
出于这个原因,我实际上将ListViewItem作为QR_记录的一个属性,如下所示
Public ReadOnly Property List_Item() as ListViewItem
Get
Dim Item As new ListViewItem
Item.Text = Code
item.SubItems.Add(Category)
item.SubItems.Add(Name_Full)
....
Return Item
End Get
End Property
说了这么多:正如其他人指出的那样。。。从整体上看,这确实不是解决问题的正确方法。将数据添加到LV时,会将第一个和最后一个连接起来。控件无法撤消您所做的操作。DataGridView是DB opsl的更好选择,因为它需要更少的代码和更好的数据类型。我们的讲师只允许我们以硬编码方式使用LV和。我想不出其他解决办法。先生,你能建议其他解决办法吗。我陷入困境,想不出更好的解决方案。我想你们需要一个更聪明的老师或是一门更新的课程:ADODB和ListView?既然你把名字粘在了一起,你可以用
String.Split
把它们分开。我想我需要更聪明的老师。是的,他只允许我们使用ADODB和ListView。还有其他一些手术,但他坚持下去。但是,谢谢您的快速回复,先生。我试试看。
With QR_Records(ListView1.SelectedIndices(0))
....
Dim FullName as string = .Name_Full
....
End With
Public ReadOnly Property List_Item() as ListViewItem
Get
Dim Item As new ListViewItem
Item.Text = Code
item.SubItems.Add(Category)
item.SubItems.Add(Name_Full)
....
Return Item
End Get
End Property