2016-09-25 5 views
1

貴重なご提案を高く評価します。vb.netフォームのListViewをクリックするとSQLテーブルの複数の列から値を取り出す方法は?

私は次のようにSQLテーブルを作成しました。

Create table Products (
ItemCode int NOT NUll Primary Key, 
ItemName varchar(255), 
ItemImage varbinary(MAX), 
Category int, 
Price Money, 
Note varchar(255)) 

次に、テキストボックスとリストビューを含むvb.net windowsフォームを作成しました。フォームロードイベントで次のコードを与えました。

Imports System.Data.Sql 
Imports System.Data.SqlClient 
Imports System.Configuration.ConfigurationManager 
Imports System.IO 

Public Class items 
    Dim sqlCon As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("myPosConString").ConnectionString) 
    Dim Command As SqlCommand 
    Dim Reader As SqlDataReader 
    Dim i As Integer 
    Dim Query As String 


    'Fill Items with pictures into listview 
    Private Sub FillItemListView() 
     Dim Adapter As New SqlDataAdapter 
     Dim dt_Images As New DataTable 

     Try 
      lvItem.Clear() 
      Dim imglist As New ImageList 
      imglist.ColorDepth = ColorDepth.Depth32Bit 
      lvItem.LargeImageList = imglist 
      lvItem.LargeImageList.ImageSize = New System.Drawing.Size(100, 100) 
      sqlCon.Open() 
      Query = "select * from products " 
      Command = New SqlCommand(Query, sqlCon) 
      Adapter.SelectCommand = Command 
      Adapter.Fill(dt_Images) 

      For Each dr As DataRow In dt_Images.Rows 

       Dim img_buffer = CType(dr("ItemImage"), Byte()) 
       Dim img_stream As New MemoryStream(img_buffer, True) 
       img_stream.Write(img_buffer, 0, img_buffer.Length) 
       imglist.Images.Add(dr("ItemCode").ToString(), New Bitmap(img_stream)) 
       img_stream.Close() 
       Dim lstv As New ListViewItem 
       lstv.Text = dr("ItemName").ToString 
       lstv.ImageKey = dr("ItemCode").ToString 
       lvItem.Items.Add(lstv) 
      Next 
     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 
    End Sub 

    Private Sub items_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     FillItemListView() 

    End Sub 

End Class 

私が望むようにすべてが機能しています。しかし、Listviewで大きな画像をクリックすると、すべてのテキストボックスにSQLテーブルの他の列から値を取得したいと思います。

リストビュー名は、lvItemと txtboxesはtxtCodetxtNametxtCategorytxtPricetxtNoteあるあります。

どうすればいいですか教えてください。 ありがとうございます。

+0

DataTableとDataGridViewを使用した場合、多くのコードと苦労を省くことができます。「myDGV.DataSource = myDataTable」は、コードをすべて置き換えて文字列をLV – Plutonix

+0

@Plutonixにコピーできますが、 DataGridViewで水平にアイコンとしてのSQLテーブル? –

答えて

0

あなたはListViewその後、ListViewDetails以外Viewを使用する必要がある場合DataGridViewは、他のビューをサポートしていないとして、それは、でなければなりません。

DataTableBindingSourceにバインドしてからTextBoxesにバインドすることをお勧めします。ユーザーがListViewの項目を選択すると、その項目のIndexBindingSourcePositionに割り当てることができます。そうすると、そのインデックスにある行のフィールドがバインドされたTextBoxesに表示されます。

ListViewをユーザーが並べ替えることができる場合は、BindingSourceSortプロパティを同期させるように設定することもできます。

関連する問題