Что может вызвать ошибку таблицы данных в столбце изображения только при развертывании на компьютере с Windows 10?

#winforms #datagridview #datagrid #datagridviewcolumn #datagridviewimagecolumn

#winforms #datagridview #datagrid #datagridviewcolumn #datagridviewimagecolumn

Вопрос:

У меня есть приложение C # Windows forms с таблицей данных. Один столбец таблицы — это столбец изображения, в который я помещаю растровое изображение. Он отлично работает на компьютере с Windows 10, на котором я его разработал, и при развертывании на компьютерах с Windows 7, но на всех других компьютерах с Windows 10 я получаю сообщение об ошибке. Ошибка «Система.Исключение FormatException: форматированное значение ячейки имеет неправильный тип.» Мне не удалось воссоздать ошибку на моем компьютере для разработки, поэтому я не уверен, как выяснить, что не так. Я подумал, что это может произойти из-за того, что при развертывании не было включено какое-либо предварительное условие (это приложение с одним щелчком мыши), но я не вижу, чтобы что-то отсутствовало. Я подумал, что, возможно, он не смог найти ссылки на изображение, поэтому я попытался нарисовать их вместо этого и все равно получил ту же ошибку. Я предполагаю, что это связано с моим столбцом bitmap, но я не знаю, почему это будет работать на моем компьютере и компьютерах с Windows 7, а не на других компьютерах с Windows 10. Есть идеи о том, что происходит и / или как это исправить?

Вот конструктор для моей сетки: введите описание изображения здесь

Вот настройки DefaultCellStyle. Я думал, что причиной может быть значение Null. Изначально у меня была System.Рисование.В нем растровое изображение. Я пытался использовать null, но все равно получаю ошибку. введите описание изображения здесь

Вот код для заполнения этого столбца.

  Bitmap bmpCombineOnly = new Bitmap(1, 1);

 Bitmap bmpYellow = new Bitmap(26, 26);
 Graphics grYellow = Graphics.FromImage(bmpYellow);
 grYellow.DrawEllipse(new Pen(Color.Yellow, 2), 0, 0, 25, 25);
 grYellow.FillEllipse(new SolidBrush(Color.Yellow), 0, 0, 25, 25);

 bmpCombineOnly = bmpYellow;

 foreach (DataGridViewRow row in ItemsInLocationDataGridView.Rows)
 {
     row.Cells["Icon"].Value = bmpCombineOnly;
 }
  

Комментарии:

1. Это поле NullValue в propertygrid подходит для текстовых столбцов, но не для столбца изображения. Да, отображается строка «Система. Рисование. Bitmap», но это результат BitmapInstance.Tostring() . Если вы введете некоторый текст в таблицу свойств, в ней будет сохранено это строковое значение, которое не подходит для ячейки, ожидающей значение bitmap. Найдите строку в файле конструктора формы, которая присваивает строке значение `Nullvalue и удалите ее, чтобы восстановить значение по умолчанию.

2. Итак, у вас есть столбец с именем Icon . Он вообще компилируется с таким именем? Происходит утечка графических ресурсов: ни один из созданных вами объектов не удаляется. Я не понимаю, как это использовать: bmpCombineOnly = bmpYellow; .