Вместо этого отображается значок True / False в сетке данных в форме windows - PullRequest
0 голосов
/ 12 января 2020

У меня есть datagridview в форме Windows, которая показывает содержимое таблицы базы данных, один столбец типа таблицы является логическим, поэтому в datagridview отображается true / false, но я хочу настроить его так, чтобы отображать значок или изображение, например, Accepted, или отклоненные значки. Те значки, которые у меня есть в моих ресурсах проекта. Это мой код

var cars = (from u in db.Cars
             .......... 
           select new
           {
           .....
           .....                                                
           Approved = u.Treated == true ? Resources.approved : Resources.Cancel  // Here Not working

           }).ToList();
           if (cars != null)
           {
             dgvCars.DataSource = null;
             dgvCars.DataSource = cars;

            }

. В утвержденной ячейке я хочу показать один из этих значков, в зависимости от true или false. Я сделал, как вы видите в моем коде

Approved = u.Treated == true ? Resources.approved : Resources.Cancel

, но не работает. Может быть, мне нужно что-то кодировать в моих событиях Fomatingcell, но я не знаю, как это сделать. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 12 января 2020

DataGridViewImageColumn может отображать изображения.
По умолчанию DataGridView автоматически генерирует столбцы на основе типа значения. DataGridViewImageColumn будет сгенерировано по умолчанию, если значением является массив байтов (byte[]).

В вашем случае тип отличается. Вы можете решить двумя способами:

Первый:
Преобразовать изображения в байтовые массивы.

Второй:
Создать столбец изображения вручную и связать его со свойством изображения.

// Execute it once when initializing datagridview
var approvedColumn = new DataGridViewImageColumn
{
    Name = "dgvCars_Approved",
    HeaderText = "Approved",
    DataPropertyName = "Approved", // This will bound column to the property of the object
};
dgvCars.Columns.Add(approvedColumn);

// DataGridView will automatically pick up correct image
var cars = (
    from u in db.Cars
    .......... 
    select new
    {
       .....
       .....                                                
       Approved = u.Treated == true ? Resources.approved : Resources.Cancel
    }).ToList();

    // Check for null is redundant, because ToList() never returns null
    // Because cars is a new instance 
    // set .DataSource to null before actual value is redundant as well

    dgvCars.DataSource = cars;

Второй подход может привести к путанице с автоматически сгенерированными столбцами, но я бы предложил создать все необходимые столбцы вручную с помощью дизайнера или вручную с помощью кода.
Предопределенные столбцы обеспечат больший контроль над поведением представления и гибкостью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...