Форматирование определенных строк в DataGridView

У меня есть DGV с именем dataGridView1, который имеет два столбца: столбец изображения и столбец строки. У меня также есть собственная коллекция данных, которую я использую для заполнения DGV. В моем конкретном приложении каждая строка будет иметь указанную строку в столбце строк и одно из двух изображений в столбце изображений. У меня возникают проблемы с отображением правильного изображения в столбце изображений при заполнении 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.


person Jerry    schedule 27.04.2014    source источник
comment
Я не совсем понимаю вопрос и как он соответствует заголовку вопроса. У вас есть проблема с отображением изображения в связанном dgv или при редактировании какой-либо ячейки? Не могли бы вы переформатировать его?   -  person d_z    schedule 28.04.2014
comment
@d_z Название вопроса в порядке, но я немного переформулировал его. Как я могу установить столбец в строке для определенного изображения на основе фрагмента данных в наборе данных?   -  person Jerry    schedule 28.04.2014


Ответы (1)


Чтобы показать изображение в связанном DataGridView на основе значения данных, вы должны обработать событие CellFormatting DataGridView. Я бы рекомендовал хранить изображение в некоторой структуре памяти, такой как 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[])

Надеюсь это поможет.

person d_z    schedule 28.04.2014