格式化DataGridView中的特定行

时间:2014-04-27 21:54:12

标签: c# datagridview

我有一个名为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的图标列中。

1 个答案:

答案 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[])

希望这有帮助。