Avatar 列を追加したい DataTable にバインドされた DataGridView があります。列はアンバインドされます。私はそれを行うために次のコードを使用しています:
if (MyIcons != null)
{
DataGridViewImageColumn imageColumn = new DataGridViewImageColumn();
imageColumn.Name = "Avatar";
imageColumn.HeaderText = "";
imageColumn.DefaultCellStyle.NullValue = null;
ViewRolesDataGrid.Columns.Insert(0, imageColumn);
foreach (DataGridViewRow row in ViewRolesDataGrid.Rows)
{
Guid iconGuid = (Guid)row.Cells["ID_Picture"].Value;
if (MyIcons.Icons32x32.ContainsKey(iconGuid))
{
Image bm = MyIcons.Icons32x32[iconGuid];
DataGridViewImageCell cell = row.Cells["Avatar"] as DataGridViewImageCell;
cell.Value = MyIcons.Icons32x32[iconGuid];
}
}
}
MyIcons は、ID_Picture GUID をデータベースから、以前にフェッチしてキャッシュした実際の画像にハッシュする一連の辞書を含むクラスです (そのため、クエリを実行して画像データを送り返すたびに images テーブルに結合する必要はありません)。MyIcons キャッシュが正常にインスタンス化され、画像が含まれていることを確認しました。上の画像「bm」には、32x32 の 32 ビットのビットマップが含まれています。
プログラムを実行すると、バインドされていない画像列がビューに表示されますが、画像はレンダリングされません。値が null であるかのように動作します (DefaultCellStyle.NullValue の変更が影響します)。画像テーブルで完全結合を実行して、DataTable で画像にバインドされた列を作成すると、画像が表示されます。
誰でも私のエラーを見つけることができますか?
ありがとう。
編集:ビットマップをセルに直接割り当てても機能しません。つまり、その列には何も表示されません。
cell.Value = Bitmap.FromFile("picture_32x32.png");