VB6時代には提供されていた、DataRepeaterコントロールは、.NETになり提供されなくなりましたが、
Visual Basic Power Packs 3.0
として提供されています。このPower Packsには、他にも、
・Interop Forms Toolkit
・Printer Compatibility Library
・Line and Shape Controls
・PrintForm Component
が含まれています。ここでは、これらの説明はしませんが、名前から想像できる機能が提供されています。
■Visual Basic Power Packs 3.0をインストール
http://www.microsoft.com/downloads/details.aspx?FamilyId=371368A8-7FDC-441F-8E7D-FE78D96D4063&displaylang=en
より、Power Packsをダウンロードして、インストールしてください。
インストールが完了すると、ツールボックスに「Visual Basic Power Packs 3.0」が追加されます。

■簡単なサンプルの紹介
「日本の歴代首相画面」を作っていきます。(なぜ歴代首相なのかは?????)
フォームは、以下のうように特殊なコントロールは利用していません。DataRepeaterコントロールは利用していますが・・・

■ソースコード
Imports System.Data
Public Class Form1
Private _dt As New DataTable
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
'DataTable初期化
With _dt
'
.Columns.Add("Generations", GetType(String)) '代
.Columns.Add("Name", GetType(String)) '名前
.Columns.Add("From", GetType(String)) '出身
.Columns.Add("Image", GetType(Image)) '画像
.Columns.Add("Popularity", GetType(Integer)) '人気
'
.Rows.Add("81代", "村山富市", "大分県", Image.FromFile("Images\81.jpg"), 10)
.Rows.Add("82,83代", "橋本龍太郎", "岡山県", Image.FromFile("Images\82.jpg"), 50)
.Rows.Add("84代", "小渕恵三", "群馬県", Image.FromFile("Images\84.jpg"), 40)
.Rows.Add("85,86代", "森喜朗", "石川県", Image.FromFile("Images\85.jpg"), 30)
.Rows.Add("87,88,89代", "小泉純一郎", "神奈川県", Image.FromFile("Images\87.jpg"), 90)
.Rows.Add("90代", "安倍晋三", "山口県", Image.FromFile("Images\90.jpg"), 5)
.Rows.Add("91代", "福田康夫", "群馬県", Image.FromFile("Images\91.jpg"), 15)
End With
''バインディング
Me.lblGenerations.DataBindings.Add("Text", Me._dt, "Generations")
Me.lblName.DataBindings.Add("Text", Me._dt, "Name")
Me.lblFrom.DataBindings.Add("Text", Me._dt, "From")
Me.picFace.DataBindings.Add("Image", Me._dt, "Image")
Me.tbPopularity.DataBindings.Add("Value", Me._dt, "Popularity")
Me.pgbPopularity.DataBindings.Add("Value", Me._dt, "Popularity")
Me.drMain.DataSource = Me._dt
End Sub
Private Sub btnDel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnDel.Click
'削除
Dim lbl As Label = CType(Me.drMain.CurrentItem.Controls("lblName"), Label)
If MessageBox.Show(lbl.Text & vbCrLf & _
"を削除してもよろしいですか?", "確認", MessageBoxButtons.OKCancel, _
MessageBoxIcon.Question) <> Windows.Forms.DialogResult.OK Then Exit Sub
Me._dt.Rows.RemoveAt(Me.drMain.CurrentItemIndex)
End Sub
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnAdd.Click
'追加
Me._dt.Rows.Add("999代", "ビリケン", "ビリ県", Image.FromFile("Images\NEW.jpg"), 100)
End Sub
Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnExit.Click
'終了
Me.Close()
End Sub
End Class
特に説明する箇所はないと思いますが、削除処理を行っている42行目のコードは、現在のアイテム内の特定のコントロールを参照するコードです。
■実行結果

■一言
だいぶ待ってリリースされましたね。大容量のデータを対象にした場合はどうなるのか不明・・・たぶんオーナードローなんだろうな。
|