none
ListViewに表示ができない RRS feed

  • 質問

  • こんにちは。

    ListViewにDBから取得したデータを表示するため、以下のように記述がしてあります。

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim CharArray() As Char = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよSBらりるれろわん   がぎぐげござじずぜぞだぢづでどばびぶべぼ".ToCharArray()
            Dim sz As Integer = 35
            Dim px As Integer = 0
            Dim py As Integer = 45
            Dim but As Button
            LV = New System.Windows.Forms.ListView
            Dim lv_clm_ptcode = New System.Windows.Forms.ColumnHeader
            Dim lv_clm_ptname = New System.Windows.Forms.ColumnHeader
            Dim lv_clm_dummy = New System.Windows.Forms.ColumnHeader

            'フォームのサイズを修正
            'Me.ClientSize = New System.Drawing.Size(600, 500)

            'フォームのタイトルを指定
            Me.Text = "患者検索"
            'フォームの表示位置を画面中央へ移動
            'Me.StartPosition = FormStartPosition.CenterScreen

            '50音のボタンを配置
            For i As Integer = 0 To CharArray.Length - 1
                If (i Mod 5) = 0 Then
                    px += sz
                    py = 50
                End If

                '文字列が空白の場合は、その該当するボタン分のスペースを空けて次へいく
                Console.WriteLine(CharArray(i).ToString)
                If CharArray(i).ToString <> " " Then
                    but = New System.Windows.Forms.Button
                    but.Location = New System.Drawing.Point(px, py)
                    but.Name = String.Format("But{0}", i)
                    but.Size = New System.Drawing.Size(sz, sz)
                    but.TabIndex = 0
                    but.Text = CharArray(i).ToString()
                    but.UseVisualStyleBackColor = True
                    but.Font = New System.Drawing.Font("MS UI Gothic", 11)
                    AddHandler but.Click, AddressOf but_Click
                    Me.Controls.Add(but)
                    py += sz
                Else
                    py += sz
                End If
            Next
            txt_Search = New System.Windows.Forms.TextBox
            txt_Search.Location = New System.Drawing.Point(35, 13)
            txt_Search.Name = "txt_Search"
            txt_Search.Size = New System.Drawing.Size(150, 20)
            txt_Search.Font = New System.Drawing.Font("MS UI Gothic", 11)
            txt_Search.TabIndex = 0
            Me.Controls.Add(txt_Search)

            '患者の一覧を表示するリストビューの設定
            With LV
                .Columns.AddRange(New ColumnHeader() {lv_clm_dummy, lv_clm_ptcode, lv_clm_ptname})
                .Location = New System.Drawing.Point(35, 240)
                .Name = "lv_PtIchiran"
                .Size = New System.Drawing.Size(400, 200)
                .View = View.Details
            End With

            Me.Controls.Add(LV)

            'リストビュー1列目
            With lv_clm_dummy
                .displayindex = 0
                .text = ""
                .width = 0
            End With

            'リストビュー2列目
            With lv_clm_ptcode
                .displayindex = 1
                .text = "患者コード"
                .width = 115
                .textalign = HorizontalAlignment.Center
            End With

            'リストビュー3列目
            With lv_clm_ptname
                .displayindex = 2
                .text = "患者氏名"
                .width = 160
                .textalign = HorizontalAlignment.Center
            End With

        End Sub

        '50音のボタンをクリックした際のイベント
        Private Sub but_Click(ByVal sender As Object, ByVal e As EventArgs)
            'Sの場合は、スペースを入れる
            'Bの場合は、一文字戻る
            If CType(sender, Control).Text = "S" Then
                txt_Search.Text = txt_Search.Text + " "
            ElseIf CType(sender, Control).Text = "B" Then
                txt_Search.Text = Strings.Left(txt_Search.Text, Len(txt_Search.Text) - 1)
            Else
                txt_Search.Text = txt_Search.Text + CType(sender, Control).Text
            End If

            'ListViewのデータをクリア
            Me.LV.Clear()

            Call Disp_PtList(Me.txt_Search.Text)
        End Sub

        'テキストボックスに指定した頭文字を持つ対称の患者の一覧をListViewに表示
        Private Sub Disp_PtList(ByVal PtKana As String)
            Dim i As Integer
            Dim strsql As String
            strsql = "SELECT pt_code, pt_name FROM t_patient "
            Dim Cn As New SqlConnection(My.MySettings.Default.Cn)

            Dim cmd As New SqlCommand(strsql, Cn)
            cmd.Connection.Open()

            Dim dr As SqlDataReader = cmd.ExecuteReader

            i = 0

            While dr.Read
                Debug.Print(dr("pt_code") & dr("pt_name")) ←ここ

                With Me.LV
                    .Items.Add(dr("pt_name"))
                    .Items(i).SubItems.Add(dr("pt_code"))

                    i = i + 1
                End With
            End While

        End Sub

    長くて申し訳ありません。

    コレを実行すると、フォームのロード時に作成をしたListViewのコラムヘッダーが消え手しまいます。(正確にはヘッダーの部分は残っているのですが、そこに表示されている各コラムのテキストがなくなってしまいます。)

    また、ListViewの中にも何もデータが表示されません。(Debugで確認をしたのですが、DBからデータは取得できています。

    ListViewのヘルプなども読み直してはいるのですが、原因がわかりません。

    どうか、アドバイスお願いいたします。

    2007年6月6日 3:13

回答


  •         'ListViewのデータをクリア
            Me.LV.Clear()

      これだとカラムヘッダーもクリアしてしまうかと。

     

          Me.LV.Items.Clear()

    が正解かな。
    2007年6月6日 3:32

すべての返信


  •         'ListViewのデータをクリア
            Me.LV.Clear()

      これだとカラムヘッダーもクリアしてしまうかと。

     

          Me.LV.Items.Clear()

    が正解かな。
    2007年6月6日 3:32
  • ご回答ありがとうございます。

    教えていただいたとおりにしたところ、表示もうまくできました。

    ありがとうございました。
    2007年6月7日 4:41