どらえも〜ん…
というわけでお初です。よろしくお願いします。
DBの内容をlistview(.View = Details)を使って、表示しようとしているのですが、現在は空欄の行が追加した項目の個数だけ表示されてしまいます。
ただ、listview自体を変数として宣言し、同じようにlistviewにlistviewitemを追加して、これをformに貼り付けると、ちゃんとDBの内容が表示されていることから、listviewへの項目の追加についてはちゃんとできているような気がします。
一応ソースをのっけておきます。
Private Sub btnSqlSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSqlSelect.Click
Dim rdr As OleDbDataReader
Dim lsv_item As New ListViewItem
Dim i, j As Long
'formに既にlsv_1というlistviewが用意してあります。
me.lsv_1.Items.Clear()
'sql文を実行して、結果を第二引数の「OleDbDataReader」に格納する関数です。
Sql_Exec("select * from Company",rdr)
If rdr.HasRows Then
rdr.Read()
me.lsv_1.Columns.Add("項番", -2, HorizontalAlignment.Left)
For i = 0 To rdr.FieldCount - 1
me.lsv_1.Columns.Add(rdr.GetName(i).ToString(), -2, HorizontalAlignment.Left)
Next i
Do
lsv_item = New ListViewItem("item" & CStr(j), 0)
For i = 0 To rdr.FieldCount - 1
If IsDBNull(rdr.GetValue(i)) Then
lsv_item.SubItems.Add("NULL")
Else
lsv_item.SubItems.Add(CStr(rdr.GetValue(i)))
End If
Next i
me.lsv_1.Items.Add(lsv_item)
j = j + 1
Loop While rdr.Read()
Else
MsgBox("レコードが選択されませんでした。")
End If
rdr.Close()
End Sub
どうか、よろしくお願いします。
環境を書き忘れていました。
Xp VS.NET2003
です。よろしくお願いします。
>ただ、listview自体を変数として宣言し、同じようにlistviewにlistviewitemを追加して、
>これをformに貼り付けると、ちゃんとDBの内容が表示されていることから、listviewへの項目の
>追加についてはちゃんとできているような気がします。
たぶん読んでる側には何のことか伝わってないと思うけど、ヘルプ見てたら
たまたま分かったので…w。
-2 が原因みたい。でも理由は不明のままですが。Me.Controls.Add された
後のイベントを1つ1つ検証していけば分かるんだろうけど…やる気が…(汗)
[VB.NET]
Private Sub btnSqlSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSqlSelect.Click
Dim i As Integer
With Me.lsv_1.Columns
For i = 0 To .Count - 1
.Item(i).Width = 80
Next
End With
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.CreateMyListView()
With Me.lsv_1
.Bounds = New Rectangle(New Point(10, 220), New Size(300, 200))
.View = View.Details
.Columns.Add("Item Column", -2, HorizontalAlignment.Left)
.Columns.Add("Column 2", -2, HorizontalAlignment.Left)
.Columns.Add("Column 3", -2, HorizontalAlignment.Left)
.Columns.Add("Column 4", -2, HorizontalAlignment.Center)
End With
End Sub
Private Sub CreateMyListView()
' Create a new ListView control.
Dim listView1 As New ListView
With listView1
.Bounds = New Rectangle(New Point(10, 10), New Size(300, 200))
' Set the view to show details.
.View = View.Details
' Create columns for the items and subitems.
.Columns.Add("Item Column", -2, HorizontalAlignment.Left)
.Columns.Add("Column 2", -2, HorizontalAlignment.Left)
.Columns.Add("Column 3", -2, HorizontalAlignment.Left)
.Columns.Add("Column 4", -2, HorizontalAlignment.Center)
End With
Me.Controls.Add(listView1)
End Sub 'CreateMyListView
あ、環境によって正常に動くかもしれないので現象も文で書いておきます。
ListView.ColumnHeaderCollection.Add メソッドあたりのヘルプに
サンプルがあるんですが、Me.Controls.Add で新しく追加した ListView
のカラムの設定は幅に -2 を設定するとカラムの幅が『列ヘッダーのテキスト
のサイズに自動的に変更』になってると思います。ところがデザイン画面で
設定した ListView にコードでカラムの追加をする場合に -2 を指定しても
幅が変わってくれないです。100 とか指定すると大丈夫です。
Win2000(Sp4)VS.NET2003
特攻隊長まるるうさん、レスありがとうございます。
おかげで解決しました。
>>ただ、listview自体を変数として宣言し、同じようにlistviewにlistviewitemを追加して、
>>これをformに貼り付けると、ちゃんとDBの内容が表示されていることから、listviewへの項目の
>>追加についてはちゃんとできているような気がします。
>たぶん読んでる側には何のことか伝わってないと思うけど、ヘルプ見てたら
>たまたま分かったので…w。
すいません、わかりづらかったですね。
msdnのヘルプ(listviewとかで検索したとこ)にのってるプログラムだとそうなっています。
>-2 が原因みたい。でも理由は不明のままですが。Me.Controls.Add された
>後のイベントを1つ1つ検証していけば分かるんだろうけど…やる気が…(汗)
そのとおりでした。
widthの指定を「-2」ではなく、「80」で固定にしたら表示されました。
なぜかcolumnの幅が0になっていて、項目が見えてなかったというオチですね…。
なんともはかない…
これで先に進むことができます。
本当にありがとうございました。
書き込みが重なってしまいました。
まるるうさん、たびたびありがとうございます。
>ListView.ColumnHeaderCollection.Add メソッドあたりのヘルプに
>サンプルがあるんですが、Me.Controls.Add で新しく追加した ListView
>のカラムの設定は幅に -2 を設定するとカラムの幅が『列ヘッダーのテキスト
>のサイズに自動的に変更』になってると思います。ところがデザイン画面で
>設定した ListView にコードでカラムの追加をする場合に -2 を指定しても
>幅が変わってくれないです。100 とか指定すると大丈夫です。
デザイン画面で設定したものに関しては何か特別な処理が必要かもしれないですね。
画面のリロードみたいなものがあるんでしょうか…。
またよろしくお願いします。
ありがとうございました。
ツイート | ![]() |