2017-02-26 6 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 

しかし、問題は、フルネームでは唯一のファーストネームテキストボックスであり、およびLastName、FirstNameおよび中東初期テキストボックスで区切られていません。私は立ち往生していて、姓、名、およびミッドナイトを分けたいと思っています。何か提案やアドバイスをいただければ幸いです。 Here is the result

+1

LVにデータを追加すると、FirstとLastが連結されます。コントロールはあなたがしたことを元に戻すことができません。 DB opslでは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) 

NOTEフルネームを離れて破ることができるしていない場合のイニシャルが存在するかどうかを確認し、余分なコンマをスキップチェックしたいです:分割機能の3は、分割を3つの項目に制限します。これは重要ではないように見えるかもしれませんが、一部のユーザーが追加しない保証はありません "、"名前欄のどこかに... "Charles、The 3rd"の頭文字です。長さリミッタを使用すると、2番目の "、"がイニシャルフィールドに引かれた後に残っているものを確実にします。

私ももつとも

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 

BONUS:この方法を使用することの追加の利点は、あなたがあなたのレコードの数が多いはるかに優れたパフォーマンスを提供しますどのVIRTUAL MODEでListViewコントロールを使用することができるということです。他の人が指摘しているとして...これは本当にへの正しいアプローチではない:

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 

はすべてのことを言って、次のように私は実際のListViewItemにQR_Recordの財産になるだろう。そのため

その問題は完全です。