sql >> データベース >  >> RDS >> Access

Ms-AccessTreeViewを使用したListViewコントロール

    はじめに。

    Microsoft Access ListView Controlプロジェクトは、TreeView Controlチュートリアルのこのエピソードで、ここで設計およびデモンストレーションされています。主なタスクは、最初にTreeViewコントロールに製品のカテゴリアイテムを入力することです。次に、TreeViewコントロールでカテゴリ項目を選択すると、関連する製品レコードが製品テーブルからフィルタリングされ、ListViewコントロールに一覧表示されます。各レコードのフィールド値は、異なる列に表示されています。

    TreeView、ImageList、およびImageComboコントロールに精通しており、以前のエピソードでそれらを使用しました。

    ListViewコントロールは、3つの異なるフィールドのデータを3つの異なる列に表示します。列には、列ヘッダーと、 ReportIcons、ツールチップテキストなどの他の列プロパティがあります。 。

    製品レコードにはいくつかのフィールドがあり、それらすべてをListViewコントロールに表示することはできず、小さな領域にいくつかの列があります。代わりに、ListViewコントロールでアイテムが選択されると、選択された製品レコードの完全な詳細を含む別のフォームが開きます。簡単に言うと、これは、TreeView、ListView、およびImageListコントロールを使用して、ここで行うことを計画していることです。

    ListView Controlのプロパティには、Microsoft AccessListBoxControlと同様の特性があります。各列ヘッダーの下に、関連する値を並べて表示する列があります。 列幅 各列のプロパティ値は、フィールド値にコンテンツを適切に表示するのに十分なスペースがあることを保証します。 ListViewアイテムはクリックに応答するため、必要に応じて、フォーム、レポート、マクロを開いたり、他の関数を呼び出したりするなど、他のアクションを実行できます。

    以前のチュートリアルセッションへのリンク。

    1. MicrosoftTreeViewControlチュートリアル。
    2. TreeViewControlを使用したアクセスメニューの作成。
    3. TreeViewコントロールへの画像の割り当て。
    4. TreeView Control-2に画像を割り当て、他のプロジェクトと共有可能なImageListControlを作成します。
    5. TreeViewコントロールチェック-ノードの追加、削除をマークします。
    6. TreeViewImageComboドロップダウンアクセスメニュー。
    7. ドラッグアンドドロップでTreeViewノードを再配置します。

    アクセスリストボックスコントロールの記事。

    Microsoft Accessでは、ListBoxコントロールを使用して情報を表示し、さまざまな方法で使用できました。カスタムメイドのフォームウィザードとカスタムメイドのレポートウィザードを作成します。リストボックスでハイパーリンクを作成する場合、別のリストボックスのソースデータからリストアイテムを作成する場合、外部ファイルリストをリストボックスに取り込む場合、またはFilter()関数の出力をリストボックスに割り当てる場合。これらは、AccessListBoxで以前に試した方法の一部です。参考までにリンクを以下に示します。

    1. カスタムメイドのフォームウィザード。

    2. カスタムメイドのレポート-ウィザード。

    3. リストボックスでハイパーリンクを使用してフォームを開きます。

    4. 別のリストボックスからリストを作成します。

    5. 動的リストボックスコンボボックスの内容。

    6. ListBoxでの関数出力のフィルター。

    7. ListBox-2のフィルター関数出力

    8. リストボックスと日付パート1。

    9. リストボックスと日付パート2。

    TreeViewコントロールのデモ画像を含むListView。

    TreeViewおよびListViewコントロールを備えたフォームのデモ画像ビュー:

    デザインビューのListViewデモフォーム。

    フォームのデザインfrmListView。

    1. frmListViewという名前で新しいフォームを作成し、フォームの詳細セクションに次の3つのコントロールを挿入します。名前は、以下のように各コントロールに指定されています。

    2. フォームにTreeViewコントロールを挿入し、左側のActiveXコントロールリストから、名前を TreeView0に変更します。 。通常のアクセスプロパティシートを表示し、を変更します プロパティ値から6.614cm および高さ 9.709 cm

    3. TreeViewコントロールの右側にあるActiveXコントロールからListViewコントロールを挿入し、その名前を ListView0に変更します。 。 ListViewコントロールは約12.462cm ワイド および9.709cm 高さ 、Productsテーブルの3列のデータを表示するための十分なスペース。両方のコントロールを互いに近くに配置し、上端を揃えます。

    4. ActiveXコントロールリストからImageListコントロールを挿入し、ListViewコントロールの右側のどこかに配置し、そのNameプロパティ値を ImageList3に変更します。 。

      このトピックに不慣れで、ActiveXコントロールの中に上記のコントロールが見つからなかった場合 リストの場合は、を添付する必要があります MSCOMLIB.OCX Microsoft Windows Common Controls) VBA編集ウィンドウの ツール--->参照 ファイルリスト。

      このページの上部にある最初のリンクをたどることをお勧めします。 MicrosoftTreeViewControlチュートリアル ガイダンス、関連ファイルの検索場所、および Microsoft Windowsを追加する方法のページ MSCOMLIB.OCX ファイルをアクセス参照ライブラリに入れます。その後、これらのファイルはで見つけることができます。 ActiveXコントロールの リスト。

    以前のチュートリアルセッションを完了し、上部にある4番目のリンクからデモデータベースをダウンロードした場合は、そのデータベースを開きます。

    デザインビューでImageListコントロールを使用してフォームを開きます。フォームからImageListコントロールのコピーを作成し、クリップボードに配置します。そのデータベースを閉じ、現在のプロジェクトデータベースを開き、デザインビューでフォームfrmListViewを開きます。フォームfrmListViewのクリップボードからImageListコントロールを貼り付けます。 ImageListコントロールの名前をImageList3に変更します 。画像がプリロードされたImageListコントロールをお持ちの場合は、次の6つの手順をスキップして、手順7から続行してください。

    画像をImageListコントロールにアップロードしています。

    または、ActiveXコントロールからImageListコントロールを挿入した場合は、コンピューター自体からいくつかの画像(4または5)をアップロードできます。次の手順を実行します:

    1. ImageListコントロールを右クリックし、 ImageListCtrl_Objectを強調表示します。 プロパティを選択します 。

    2. オプション16x 16を選択します 一般の画像サイズオプション タブ。

      注意: 画像をアップロードした後、画像サイズの値を変更することはできません。別のサイズの画像が必要だと思われる場合は、表示時に既存の画像をすべて削除し、[全般]タブで目的の画像サイズを選択してから、すべての画像を再度アップロードする必要があります。

    3. 次に、画像を選択します タブ。

    4. 画像の挿入をクリックします コマンドボタンを押して、ディスクからイメージを選択します(ほとんどのイメージタイプ:bmp、png、JPG、JPEG、およびtiffが有効です)。選択した画像が画像に表示されます コントロール。選択した画像サイズは16x16ピクセルに縮小され、大きな画像を選択した場合は画像の品質に影響を与える可能性があります。

    5. 画像のインデックス値はシステムによって入力されます。 キーに適切な一意の名前を入力します コントロール。画像のインデックス番号ではなく、TreeViewノードの画像パラメータまたはListViewアイテムのキー名を使用する場合、名前は大文字と小文字が区別されます。

    6. この方法で必要な数の画像をアップロードできます。このImageListコントロールをコピーして、他のプロジェクトに貼り付けることができます。

    7. 必要な画像のアップロードが終了したら、ダイアログボックスを閉じます。

    8. フォームのコントロールの下部に、Nameプロパティ値が cmdExitのコマンドボタンを挿入します。 キャプション付き終了

    9. フォームを保存できますfrmListView 変更が加えられました

    TreeViewでListViewコントロールを試すには、デモ用に2つのテーブルが必要です。サンプルデータベースNorthwind.accdbから取得した、Productsテーブルから2つのテーブルを作成しました。 。数値タイプのフィールドBelongsTo テーブルlvCategory。に追加されます

    テーブルに4つの新しいレコードを追加しました。最初の2つの新しいレコードには、 BelongsToがあります 値が4、のフィールド これらのレコードがレコードID番号4の子ノードであることを示します。同様に、最後の2つのレコードの BelongsToの値は10です。 分野。

    ID番号4および10のレコード、[製品名]フィールドの説明は、それらに複数のアイテムのグループがあることを示しています。カテゴリグループ名は2つの異なるカテゴリに分割され、メイングループのアイテムの下に子ノードレコードとして配置されます。カテゴリの新しいグループレコードID値は、新しいカテゴリに属する​​lvProductsテーブルの製品アイテムのParentIDフィールドで更新されました。他のいくつかの好みの考慮事項のために、2つの異なるカテゴリのアイテムを含む最初のレコードは変更されません。

    lvCategory 表の画像を以下に示します。これは、ListViewコントロールアイテムの親ノードとして、TreeViewノードにも使用されます。

    lvProducts テーブルには約45のレコードがあります。いくつかのサンプルレコードを含む表の画像を参照用に以下に示します。

    2つのテーブルの操作。

    先に進む前に、両方のテーブルを詳しく調べて、TreeViewおよびListViewコントロールで両方のテーブルが互いにどのように関連しているかを確認する必要があります。これまで、同じテーブル内にノードキー、説明、およびParentIDフィールドを含む単一のテーブルのみを操作してきました。

    これまでのチュートリアルエピソードをたどった皆さんが、同じテーブルの同じフィールド値間の関係を明確に理解していることを願っています。ここで、これらのテーブル(lvCategoryとlvProducts)の両方が2つの異なるコントロールで互いにどのように関連しているかを確認します。

    まず、 lvCategoryを確認します テーブル。 所属があります 最後の4つのレコードの値を持つフィールド。これらの4つのレコードは、レコードID4の子ノードとlvCategoryノードの10です。これらの4つのノードは、子ノードとしてTreeViewコントロールに移動し、親ノードに移動します:缶詰の果物と野菜 およびドライフルーツとナッツ TreeViewコントロール自体にあります。

    次に、 lvProductsを使用します テーブルとParentID フィールド値。 lvCategoryのカテゴリアイテムごと 表、 lvProductsには1つ以上の関連商品アイテムがあります テーブル。 ParentIDの番号 lvProductsのフィールド テーブルはlvCategoryの親レコードに属しています テーブル。別の言い方をすれば、同じ ParentIDを持つListViewコントロールにリストされているすべてのProductアイテム 値、同じ CIDを持つlvCategoryテーブルの特定のレコードに属します 価値。

    注: これらの両方のテーブルをProductsテーブルから作成するには、時間がかかる場合があります。これまでにこのチュートリアルを実行したことがある場合は、このページの最後にあるダウンロードリンクからデモデータベースをダウンロードできます。 lvCategoryをインポートします およびlvProducts このプロジェクトを使用して、データベースから現在のデータベースへのテーブル。現在のデータベースでこのプロジェクトを完了するときに問題が発生した場合は、デモデータベースを参照ポイントとして使用して作業を修正できます。

    フォームモジュールのVBAコード。

    1. frmListViewを開きます デザインビューのフォーム。

    2. フォームのクラスモジュールを表示します。

    3. 次の完全なVBAコードをコピーしてモジュールに貼り付け、 Ctrl + Sを押します。 コードを保存します。

    Option Compare Database
    Option Explicit
    
    Dim tv As MSComctlLib.TreeView
    Dim lvList As MSComctlLib.ListView
    Dim imgList As MSComctlLib.ImageList
    Const Prfx As String = "X"
    
    Private Sub Form_Load()
    Dim db As DAO.Database
    Dim tbldef As TableDef
    
        Set tv = Me.TreeView0.Object
        tv.Nodes.Clear
        
        Set imgList = Me.ImageList3.Object
        
    With tv
        .Font.Size = 9
        .Font.Name = "Verdana"
        .ImageList = imgList 'assign preloaded imagelist control
     End With
    
        Set db = CurrentDb
        Set tbldef = db.TableDefs("lvProducts")
        
        Set lvList = Me.ListView0.Object
        lvList.ColumnHeaders.Clear
        lvList.ListItems.Clear
        lvList.Icons = imgList
        
        'Initialize ListView & Column Headers Property Values
         With lvList
            .ColumnHeaderIcons = imgList
            .Font.Size = 9
            .Font.Name = "Verdana"
            .Font.Bold = False
            .View = lvwReport
            .GridLines = True
         
            'ColumnHeaders.Add() Syntax:
            'lvList.ColumnHeaders.Add Index, Key, Text, Width, Alignment, Icon
            'Alignment: 0 - Left, 1 - Right, 2 - Center
            .ColumnHeaders.Add 1, , tbldef.Fields(1).Name, 2600, 0, 5
            .ColumnHeaders.Add 2, , tbldef.Fields(3).Name, 2600, 0, 5
            .ColumnHeaders.Add 3, , tbldef.Fields(4).Name, 1440, 1, 5
        End With
        
        Set db = Nothing
        Set tbldef = Nothing
    
        
       LoadTreeView 'Create TreeView Nodes
    
    End Sub
    
    Private Sub LoadTreeView()
        Dim Nod As MSComctlLib.Node
        Dim firstCatID As Long
        Dim strCategory As String
        Dim strCatKey As String
        Dim strProduct As String
        Dim strPKey As String
        Dim strBelongsTo As String
        Dim strSQL As String
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        
        'Initialize treeview nodes
         tv.Nodes.Clear
         
        'Initialize Listview nodes
        While lvList.ListItems.Count > 0
              lvList.ListItems.Remove (1)
        Wend
        
        strSQL = "SELECT lvCategory.CID, lvCategory.Category, "
        strSQL = strSQL & "lvcategory.BelongsTo FROM lvCategory ORDER BY lvCategory.CID;"
        
        Set db = CurrentDb
        Set rst = db.OpenRecordset(strSQL, dbOpenSnapshot)
        
        If Not rst.BOF And Not rst.EOF Then
            rst.MoveFirst
            firstCatID = rst!CID
        Else
            Exit Sub
        End If
        ' Populate all Records as Rootlevel Nodes
        Do While Not rst.BOF And Not rst.EOF
                strCatKey = Prfx & CStr(rst!CID)
                strCategory = rst!Category
                
                Set Nod = tv.Nodes.Add(, , strCatKey, strCategory, 1, 2)
                Nod.Tag = rst!CID
            rst.MoveNext
        Loop
        
        'In the second pass of the the same set of records
        'Move Child Nodes under their Parent Nodes
        rst.MoveFirst
        Do While Not rst.BOF And Not rst.EOF
            strBelongsTo = Nz(rst!BelongsTo, "")
            If Len(strBelongsTo) > 0 Then
                strCatKey = Prfx & CStr(rst!CID)
                strBelongsTo = Prfx & strBelongsTo
                strCategory = rst!Category
                
                Set tv.Nodes.Item(strCatKey).Parent = tv.Nodes.Item(strBelongsTo)
            End If
            rst.MoveNext
       Loop
        rst.Close
        
        ' Populate ListView Control with Product details
        ' of the first Category Item
        LoadListView firstCatID
        
    End Sub
    
    
    Private Sub LoadListView(ByVal CatID)
        Dim strProduct As String
        Dim strPKey As String
        Dim intCount As Integer
        Dim tmpLItem As MSComctlLib.ListItem
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Dim strSQL As String
        
        ' Initialize ListView Control
        While lvList.ListItems.Count > 0
            lvList.ListItems.Remove (1)
        Wend
       
         strSQL = "SELECT lvProducts.* FROM lvProducts "
         strSQL = strSQL & "WHERE (lvProducts.ParentID = " & CatID & ") "
         strSQL = strSQL & "ORDER BY lvProducts.[Product Name];"
        
        'Open filtered Products List for selected category
        Set db = CurrentDb
        Set rst = db.OpenRecordset(strSQL, dbOpenSnapshot)
        
        Do While Not rst.BOF And Not rst.EOF
            intCount = intCount + 1
            strProduct = rst![Product Name]
            strPKey = Prfx & CStr(rst!PID)
            
            'List Item Add() Syntax:
            'lvList.ListItems.Add Index,Key,Text,Icon,SmallIcon
            Set tmpLItem = lvList.ListItems.Add(, strPKey, strProduct, , 3) 'first column
                lvList.ForeColor = vbBlue
                
                'List second column sub-item Syntax:
                'tmpLItem.ListSubItems.Add Column - Index, Key, Text, ReportIcon, ToolTipText
                tmpLItem.ListSubItems.Add 1, strPKey & CStr(intCount), Nz(rst![Quantity Per Unit], ""), 6
                
                'List third column sub-item
                tmpLItem.ListSubItems.Add 2, strPKey & CStr(intCount + 1), Format(rst![list Price], "0.00"), 6, "In Local Currency."
            rst.MoveNext
        Loop
        
        Set db = Nothing
        Set rst = Nothing
        
        If intCount > 0 Then lvList.ListItems(1).Selected = True
        
    End Sub
    
    Private Sub TreeView0_NodeClick(ByVal Node As Object)
    Dim Cat_ID As String
    Cat_ID = Node.Tag
    
    LoadListView Cat_ID
    
    End Sub
    
    Private Sub ListView0_Click()
    Dim lvKey As String, lvLong As Long
    Dim Criterion As String
    
    lvKey = lvList.SelectedItem.Key
    lvLong = Val(Mid(lvKey, 2))
    
    DoCmd.OpenForm "ProductDetails", , , , , , lvLong
    
    End Sub
    Private Sub cmdExit_Click()
        DoCmd.Close
    End Sub
    
    

    コードを確認して、コードの機能を理解してみましょう。

    グローバル宣言領域で、TreeViewオブジェクト( tv )、ListView( lvList )およびImageList( imgList )オブジェクト変数が宣言されます。一定のPrfx 変数は値「X」で宣言されています 」であり、ノードキープレフィックス値として使用されます。

    frmListView が開いている場合、 Form_Load() イベントプロシージャが実行されます。データベースオブジェクトdb およびTableDefオブジェクト変数tbldef 宣言されました。

    TreeView0 フォームのコントロールは、オブジェクト変数tv。に割り当てられます。 ステートメントtv.Nodes.Clear ツリー内のTreeViewコントロールオブジェクトインスタンスを初期化します。

    次に、 imgList オブジェクト変数はImageList3で初期化されています フォームの管理。

    TreeViewコントロールの表示フォントとImageListのプロパティ。

    次のステートメントは、TreeViewコントロールのフォント名、Font-Size、およびその ImageListを設定します。 プロパティはimgListで読み込まれています オブジェクト。これにより、TreeViewノードイメージのイメージキー名またはイメージインデックス番号を使用できるようになります。

    With tv
        .Font.Size = 9
        .Font.Name = "Verdana"
        .ImageList = imgList 'assign preloaded imagelist control
     End With
    

    ListViewコントロールのプロパティ設定と列ヘッダー。

    その後、コードの次のセグメントでListViewコントロールを初期化し、そのプロパティ値を割り当てます。

        Set db = CurrentDb
        Set tbldef = db.TableDefs("lvProducts")
        
        Set lvList = Me.ListView0.Object
        lvList.ColumnHeaders.Clear
        lvList.ListItems.Clear
        lvList.Icons = imgList
        
        'Initialize ListView & Column Headers Property Values
         With lvList
            .ColumnHeaderIcons = imgList
            .Font.Size = 9
            .Font.Name = "Verdana"
            .Font.Bold = False
            .View = lvwReport
            .GridLines = True
            
            'ColumnHeaders.Add() Syntax:
            'lvList.ColumnHeaders.Add Index, Key, Text, Width, Alignment, Icon
            'Alignment: 0 - Left, 1 - Right, 2 - Center
            .ColumnHeaders.Add , , tbldef.Fields(1).Name, 2600, 0, 5
            .ColumnHeaders.Add , , tbldef.Fields(3).Name, 2600, 0, 5
            .ColumnHeaders.Add , , tbldef.Fields(4).Name, 1440, 1, 5
        End With
        
        Set db = Nothing
        Set tbldef = Nothing

    データベースオブジェクトtbldef 変数はlvProductsで割り当てます テーブル定義。 ListViewの列ヘッダーとして使用するデータフィールド名が必要です 、関連するデータ値については、上部にあります。ヘッダーテキストパラメータ値は、テーブルフィールド名から取得できます。

    列ヘッダーに画像を表示することもできます。したがって、 imgListを割り当てました lvList .ColumnHeaderIconsへのオブジェクト 財産。

    次に、デフォルト値が適切でないと判断された場合、必要なFont、Font-size、およびStyleの値がListViewコントロールのそれぞれのプロパティに割り当てられます。

    表示を変更すると、ListViewを別の方法で表示できます。 プロパティ値。 lvwReportを選択しました (最大の機能を備えた値3)。他の値0、1、または2を変更して試すことができます。ビュープロパティ値3( lvwReport )列ヘッダーのある列に値を表示します 画像アイコンとグリッド線。

    3つのデータフィールド(製品名)を取得しました 、ユニットあたりの数量、 および定価) lvProductsテーブルから、ListViewコントロールの3つの異なる列に表示します。

    列の幅の値はピクセル単位です。 Alignment Property Valueの範囲は0〜2で、各値の意味は次のとおりです。

    0 –左揃え

    1 –右揃え

    2 –中央に揃えます。

    列ヘッダー情報を作成するには、 lvList .ColumnHeaders.Add() メソッドはパラメーターを使用して呼び出されました。

    Add() メソッド構文:

    Object.ColumnHeaders.Add Index, Key, Text, Column Width, Alignment, Icon

    上記の3つのステートメントをコードセグメントに追加し、3つのColumnHeaderすべてにフィールド名を追加しました:製品名ユニットあたりの数量 および定価

    ListViewアイテムの入力中ではなく、ListViewコントロールにアイテムを追加する前に、またForm_Load()イベントプロシージャにアイテムを追加する前に、この手順を実行しました。

    次に、 LoadTreeView()を呼び出します TreeViewコントロールノードを作成するためのサブルーチン。以前のエピソードで説明したように、このタスクを2段階のプロセスに分割しました。

    変数宣言の後、TreeViewおよびListViewコントロールが初期化されています。

    lvCategoryを開いた直後 レコードセット。最初のレコードのキーフィールド(カテゴリID:CID)の値が firstCatIDに保存されています 後で使用するための変数。

    次に、lvCategoryテーブルのすべてのレコードが最初にルートレベルノードとしてTreeViewコントロールに追加されます。

    同じレコードセットの2番目のパスで、 BelongsToをチェックします フィールド値。空の場合、それらのノードはルートレベルノードとして保持されます。それ以外の場合、ParentIDフィールド値はルートレベルノードのIDです。 ParentID値を使用して、現在のノードが子ノードとして親ノードの下に移動されました。

    前のエピソードでTreeViewコントロールにノードを設定する2段階の手順のこの側面について説明し、前回のチュートリアルセッションで詳細に実験によって証明しました。

    レコードセットオブジェクトを閉じた後、 LoadListView(ByVal CatID) サブルーチンが呼び出されました。 firstcatIDに保存された最初のカテゴリレコードのCIDフィールド値 変数がパラメータとして関数に渡されました。

    変数firstCatIDで渡されたカテゴリ固有のCIDフィールド値 パラメータとして、関連する製品レコードをフィルタリングするためのstrSQL文字列の基準として使用されています。

    ListViewコントロールに表示するために、フィルター処理されたレコードから4つのフィールドデータのみを取得しました。キーフィールド: PID 製品名ユニットあたりの数量 および定価 。 PIDフィールド値はキーとして使用されており、ディスプレイには表示されません。

    ColumnHeaders.Add() 3つの列ヘッダーすべてを追加するために、メソッドが3回呼び出されました。

    注: Keyパラメータ値を指定していないステートメントを確認してください。ただし、Index値はシステムによって挿入されます。一度ロードされた列ヘッダーを操作する予定はありません。そうしても、インデックス値を使用して列をアドレス指定できます。ただし、Productレコードフィールドの値は、列ヘッダーシーケンスと同じ順序で読み込む必要があります。

    列に製品値を使用してListViewコントロールに入力します。

    ListViewコントロールにデータリストを表示するには、3つの異なるKey値を持つ2セットのAdd()メソッドを使用して、Valuesの3つの列すべてをListViewコントロールに追加する必要があります。

    最初の列の値は、 lvListで追加されます 。ListItems Add() 方法。他のすべての列値は、 lvListで追加できます。 。ListSubItems Add() メソッド。

    intCount、という1つのカウンター変数を作成しました DoWhileごとにその値をインクリメントします。 。 。ループサイクルとその現在の値がキー(PID)値に追加され、キー値がlvList。で一意になるようになります。 ListSubItems.Add() メソッド。

    最初の列のListItems.Add() 方法 構文は次のとおりです。

    ‘lvList.ListItems.Add Index,Key,Text,Icon,SmallIcon

    Set tmpLItem = lvList.ListItems.Add(, strPKey, strProduct, , 3)

    上記のステートメントは、TreeViewノードのAddメソッドに似ています。 tmpLItem ListItemオブジェクトとして宣言されています 追加されたListItemの参照を保持して、ListSubItemの追加に使用できるようにします。

    lvList。ListSubItems.Add() 方法構文が少し異なります 以下のように。示されている構文は、2番目のパラメーター値が strPKey&Cstr(intCount + 1)の2番目の.ListSubItems.Add()メソッド用です。 。最初のListSubItems.Add()メソッドのキー値は strPKey&Cstr(intCount)になります 。

    ‘tmpLItem.ListSubItems.Add Index, Key, Text, ReportIcon, ToolTipText

    tmpLItem.ListSubItems.Add 2, strPKey & CStr(intCount + 1), Format(rst![List Price], "0.00"), 6, "In Local Currency."

    ListSubItemのAddメソッドにはReportIconがあります およびTooltipText 最後の2つのパラメータとして。最後の列にのみツールチップ-テキストパラメータ値を使用しました。

    注意: 列にロードされた値とそれに関連する他のすべての設定は、最初の列を除いて、表示オプション– 3(lvwReport)を選択した場合にのみ機能します。それ以外の場合は、すべて無視されます。

    マウスポインタを最後の列に合わせると、ツールチップのテキストが表示されます。

    3つの列すべて(ListItemsとListSubItems)で、Add()メソッドは同じレコード PIDを使用します キーとしての値。同じレコードの異なる列には、キーとして一意のID値が必要なため、intCount変数値はListSubItemsに対して1つインクリメントされ、文字列に変換されてからPIDフィールド値が追加されます。

    このようにして、選択したカテゴリアイテムに関連する製品レコードがすべてListViewコントロールに一覧表示されます。

    完全な製品レコードの詳細を表示するための個別のフォーム。

    lvProducts以降 テーブルには、ListViewコントロールに表示できるものよりも多くのフィールドと値があり、ListViewアイテムのクリックイベントは別のフォーム ProductDetailsを開きます 完全なレコードの詳細を表示します。

    選択した製品レコードのすべての詳細を含むフォームの画像を以下に示します。

    ListView0_Click()イベントプロシージャ。

    Private Sub ListView0_Click()
    Dim lvKey As String, lvLong As Long
    Dim Criterion As String
    
    lvKey = lvList.SelectedItem.Key
    lvLong = Val(Mid(lvKey, 2))
    
    DoCmd.OpenForm "ProductDetails", , , , , , lvLong
    
    End Sub

    ListView0_Click()イベントは、製品のキー-を抽出します 値を設定し、Open Argument(OpenArgs)としてフォームに渡します。

    商品詳細フォーム。

    Form_Open()イベントプロシージャで、 OpenArgs 値は、ソースレコードをフィルタリングしてフォームに表示するためのフィルター基準を作成するために使用されています。

    ProductDetailsフォームモジュールコードリスト:

    Option Compare Database
    Option Explicit
    
    Private Sub cmdClose_Click()
    DoCmd.Close
    End Sub
    
    Private Sub Form_Open(Cancel As Integer)
    Dim lngID As Long
    lngID = Nz(Me.OpenArgs, 0)
    If lngID > 0 Then
        Me.Filter = "id = " & lngID
        Me.FilterOn = True
    End If
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
    With Me
        .Filter = ""
        .FilterOn = False
    End With
    End Sub
    

    製品の詳細 フォームのソースデータは、OpenArgsを介してフォームに渡されたPID(製品ID)コードに基づいて、フィルタリングされたレコードから取得されます。元の製品テーブルはNorthWind.accdbデータベースからダウンロードされ、ProductsNewに名前が変更されました。

    ListViewコントロールプロジェクトを楽しんでいただけたでしょうか。 ListViewコントロールにはさらに多くの機能があります。

    以下に示すリンクからデモデータベースをダウンロードし、リストを表示してください。

    メリークリスマスと新年あけましておめでとうございます。

    デモデータベースのダウンロード。


    1. Excelのラウンドダウン機能
    2. MouseMoveイベントから関数を呼び出す
    3. Date2TextおよびText2Date関数
    4. WithEventsMs-Accessクラスモジュールチュートリアル
    5. WithEventsと独自のイベントの定義
    6. witheventsボタンコンボリストTextBoxタブ

    1. NHibernateで一括挿入操作を高速化

    2. MyBatisインサートリストの値

    3. テーブル変更エラーを回避する方法

    4. SQL ALTER TABLE構文–DBMSによってリストされます