2017-02-26 103 views
0

這裏是我的代碼顯示文本到文本框不同

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 

但問題是全名只在名字文本框中,而不是由姓氏,名字和中間初始文本框分開。我卡住了,想分開姓氏,名字和MiddeInitial。非常感謝任何建議或意見。 Here is the result

+1

將數據添加到LV時,將第一個和最後一個連接起來。控制不能撤銷你所做的。對於數據庫來說,DataGridView是更好的選擇,可以減少需求代碼並提供更好的數據類型。 – Plutonix

+0

其實先生。我們的教練只允許我們使用LV並採用硬編碼的方式。我想不出其他解決方案。 –

+0

您能否提出其他解決方案(先生)?我卡住了,想不到更好的解決方案。 –

回答

0

首先我會看檢查是否存在聲母和跳過額外的逗號,如果它不

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 

那麼你可以掰開全稱適當

' I'd use an intermediate variable here, just so you can see what is happening while debugging. 
    Dim FullName as string = ListView1.Items(ListView1.SelectedIndices(0)).SubItems(2).Text 
    Dim NMA() As String = Split(FullName, ", ", 3) 
    Redim Preserve NMA(2) '<--- make sure we have three parts 
    txtLastName.text = NMA(0) 
    txtFirstName.text = NMA(1) 
    txtInitials.text = NMA(2) 

注意:在拆分功能中,3將拆分限制爲三項。這似乎並不重要,但是,沒有保證某些用戶不會在名稱字段中的某個地方添加「...」,例如,第一個名字是「Charles,The 3rd」。使用長度限制器可以確保在第二個「...」之後留下的任何東西都會被放入縮寫字段。

我還用隨着有塊有點提高了工作效率....

With ListView1.Items(ListView1.SelectedIndices(0)) 
    .... 
    Dim FullName as string = .SubItems(2).Text 
    .... 
End With 

但是:沒有與分崩離析串的問題...的姓氏可能包含在其中的「,」。因此,您的文本框可能不包含使用此方法的正確數據庫值

因此,您最好從其他地方獲取值。直接從數據庫直接讀取數據庫,或者更好地將它們存儲到其他列表類型結構中。

喜歡的東西...

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在VIRTUAL MODE,這將給你很多很多更好的性能,當有大量的記錄。

出於這個原因,我實際上做的ListViewItem的QR_Record的屬性如下

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 

說了這麼多:正如其他人所指出的那樣......這確實是不正確的方法這是整個問題。