Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 将listview列中的文本显示到不同的文本框_Vb.net_Ms Access - Fatal编程技术网

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