我有一个名为dataGridView1的DGV,它有两列,一个图像列和一个字符串列。我还有一个自定义的数据集合,用于填充DGV。在我的特定应用程序中,每行在字符串列中都有一个指定的字符串,在image列中有两个图像之一。当DGV填充时,我在图像列中显示正确的图像时遇到问题。
这就是我将数据过滤到我想要放在DGV中的方式:
var match = Core.Set.Servers.Where(ServerItem => ServerItem.GameTag == text);
目前,我这样做是为了填充DGV:
dataGridView1.AutoGenerateColumns = false;
source = new BindingSource(match,null);
dataGridView1.DataSource = source;
但是,图像单元格只显示默认的损坏图像图标。我的图标位于
Directory.GetCurrentDirectory() + "//Images/favorite.png";
有使用DataTable甚至是BindingSource的好方法吗?集合中的每个项目都有两个有用的功能:ServerItem.ServerName和ServerItem.IsFavorite。第一个是字符串,第二个是布尔值。我希望收藏夹图标显示在每行具有IsFavorite == true的图标列中。
答案 0 :(得分:0)
要根据数据值在绑定的DataGridView中显示图像,您应该处理DataGridView的CellFormatting
事件。我建议将图像存储在某些内存结构中,如ImageList
,以避免往返存储。这是一个片段:
List<Row> data = new List<Row>
{
new Row { IsFavorite = true },
new Row { IsFavorite = false },
};
dataGridView1.Columns.Add(new DataGridViewImageColumn(false));
dataGridView1.Columns[0].DataPropertyName = "IsFavorite";
dataGridView1.Columns[0].DefaultCellStyle.NullValue = null;
dataGridView1.DataSource = data;
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 0)
{
if (e.Value != null && e.Value is bool)
{
if ((bool)e.Value == true)
{
e.Value = imageList1.Images[0];
}
else
{
e.Value = null;
}
}
}
}
public class Row
{
public bool IsFavorite { get; set; }
}
还有另一个建议:组合一部分路径,你可以使用Path.Combine(string[])
希望这有帮助。