DataGridViewの各行がDataGridViewRowとして手動で構築されるため、非常に遅いリストベースのアプリケーションがあります。パフォーマンスの問題を解決するために、代わりにDataSource(DataTable)を使用することに決めました。DataGridView DataSource //アイコンの整数
私の問題:私は私のデータベースからrecievingい
1つの列は画像IDで満たされています。アプリケーションはどの画像がどのIDに属しているかを知っています。手動でグリッドを作成する場合、intをビットマップに変換して、ビットマップをimagecolumnの値として使用する際に問題はありませんでした。代わりにDatatableを使用する代わりに、私はそれを働かせることができません。テストのために私は以下のクラスを書いた:
Public Class test
Dim img As Bitmap
Public Sub New(image As Bitmap)
InitializeComponent()
Me.img = image
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim dt As New DataTable
dt.Columns.Add("StrCol")
dt.Columns.Add("ImgCol")
Dim row As DataRow = dt.NewRow
row.Item(0) = "Ohne Bild"
row.Item(1) = 0
Dim row2 As DataRow = dt.NewRow
row2.Item(0) = "Mit Bild"
row2.Item(1) = 1
dt.Rows.Add(row)
dt.Rows.Add(row2)
DataGridView1.DataSource = dt
End Sub
Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
If e.ColumnIndex = 1 Then
If e.Value = 0 Then
e.Value = Nothing
Else
e.Value = img
End If
End If
End Sub
End Class
ヒント:
- "OHNEビルトは" "画像なし" に変換
- "ミットビルトは"
EDIT
。
リストベースでは、実際にはリストオブジェクトを意味しません。私の悪いところです。リストベースでは、彼が作ったユーザーのデータベースエントリーを表示するアプリケーションを意味します。私のアプリケーションの非常に基本的なものは簡単です:ユーザーがデータグリッドビューで行を追加、編集、削除することを許可します。この情報はデータベースに保存され、編集されます。行内のこれらの情報の一部(正確には2列)はアイコンとして表示され、アプリケーションはアイコンのIDをデータベースに単に保存しました。したがって、アプリケーションはどのIDがどのアイコンに属しているかを知っています。
問題のサンプルdtはちょうど何かを持つことです。このアプリケーションでは、データベースからデータテーブルにデータが転送されます。
イメージIDはイメージ自体は翻訳されません。実際の画像はどこに保存されていますか? – Plutonix
@Plutonix私はCellFormattingイベントを面白くするために上書きしようとしませんでした:-)イメージ/アイコンは、コンストラクタで定義されているインスタンスメンバに表示されています。 – Luke