|
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
|
||||||||||||||||
Странное поведение DataGridView24.06.2013, 01:45. Показов 2328. Ответов 17
Метки нет (Все метки)
Доброго времени суток!
Хочу в DataGridView отображать картинки. Делаю следующее, создаю в гриде столбец с типом: DataGridViewImageColumn, а потом в цикле по строкам пишу так:
Но если я создам на форме PictureBox и напишу так:
Почему так происходит? И как отобразить картинки в DataGridView?
0
|
||||||||||||||||
| 24.06.2013, 01:45 | |
|
Ответы с готовыми решениями:
17
Странное поведение DataGridView Странное поведение PrintSetupDialog
|
|
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
|
||||||
| 24.06.2013, 15:34 | ||||||
|
Попробуй так:
0
|
||||||
|
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
|
|
| 24.06.2013, 21:31 [ТС] | |
|
Доктор, у меня уточняющие симптомы.
Дело не в способе присваивания картинки к ячейке. Опытным путём выяснено, прекрасно работают все 3 способа, но только при одном условии. Таблица должна быть видна в тот момент, когда ячейкам присваиваются картинки! Т.е. если я вижу таблицу и запускаю присвоение, то всё ОК, если же таблица не видна когда ей присваиваются картинки, скажем она находится на другой вкладке Табконтрола, то картинки не отображаются после того как я перейду на таб с таблицей. Как лечить? Пробовал вызывать dataGridView1.Update() и dataGridView1.Refresh() - не помогает.
0
|
|
|
47 / 18 / 4
Регистрация: 17.04.2013
Сообщений: 87
|
|
| 24.06.2013, 22:14 | |
|
По идее если Вы не присваиваете какому-то контролу который может влиять на отображение dataGridView1, в том числе и самой dataGridView1 Visible = false, то независимо от того видима dataGridView1 на экране монитора или скрыта за страницей табконтрола, ей что-то можно присвоить.
Попробуйте написать функцию присвоения каких-то рисунков колонкам dataGridView1 по нажатию и активации соответствующей страницы.
0
|
|
|
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
|
|
| 24.06.2013, 23:12 | |
|
0
|
|
|
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
|
|
| 24.06.2013, 23:53 [ТС] | |
|
По идее да, какая разница где грид находится? Но у студии видимо своё мнение на сей счёт.
Но вот сейчас я таких глюков нахватался, что просто даже не знаю... Собственно опишу что происходит. Как я уже сказал, если грид активен, то всё ОК, но только если прога запущена из под Студии, если же я запускаю её отдельным экзешником, то если грид активен в момент присвоения ему картинок, выскакивает эксепшн: "в экземпляре объекта не задана ссылка на объект", если же не активен, то всё так же как и из под студии, грид не показывает картинок. Я конечно могу предположить, что где-то у меня ошибка, что где-то я пытаюсь обратиться к неинициализированному объекту, маловероятно, но не исключаю, но почему ошибка возникает только в отдельном экзешнике? Почему она не возникает при запуске из под Студии? Ну и да, попробовал присваивать картинки по событию перехода на вкладку. И тут без чудес не обходится! Сначала я заполняю датасет, а потом привязываю датагрид к датасету и следом присваиваю картинки датагриду. Так вот опять же, если датагрид не виден, когда заполняется датасет, то картинки не отобразятся. Если же открыть сначала датагрид, а потом заполнить датасет и уже после этого покинуть грид и вернуться на него (помним, что привязка к датасет и присвоение картинок делаются при открытии таба с гридом, при первом открытии ещё нечего было привязывать), тогда картинки отобразятся! И то же самое с отдельным экзешником, если заполнять датасет при открытом гриде, вылетает эксепшн, если грид не виден, никаких ошибок и никаких картинок...
0
|
|
|
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
|
|
| 25.06.2013, 00:16 | |
|
приложите проект, у меня например все хорошо работает
попробуйте создать датагрид, с 1 колонкой изображений, и посмотрите будет ли проявлятся этот глюк
0
|
|
|
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
|
|
| 25.06.2013, 01:47 [ТС] | |
|
Решил часть проблем. Обнаружил новые симптомы. Проект очень большой, весь выкладывать накладно, сейчас спать уже хочется, поэтому выдирать из него функционал с гридом и картинками не имею возможности.
А теперь подробнее. 1. Разобрался с ошибками отдельного экзешника и даже предполагаю почему они не проявлялись в студии. Я подумал, какая связь между датасетом и еще не привязанным к нему датагридом? Оказалось что есть связь, датагрид не привязан к таблице в датасете, но уже привязан к самому датасету в дизайнере. А т.к. датасет изначально пустой, грид и сваливается как только начинаются какие-то телодвижения. В студии ошибки не возникает потому что студия генерит для датасета пустую табличку отображаемую на форме в дизайнере, в самой же проге этой таблицы нет, вот и сыпятся эксепшены. Сделал привязку грида уже после того как датасет заполнен и проблема исчезла. 2. Первичные симптомы не совсем верны, что бы картинки отображались, не обязательно что бы привязка картинок делалась при открытом гриде. Достаточно перед привязкой отобразить его и можно с него уходить. Т.е. если я открою вкладку с гридом, а потом уйду с неё и запущу привязку, то всё будет ок, если же я запущу привязку не открывая грида, то картинок не будет. И у меня так же есть предположение на сей счёт. Начну с того, что визуальные объекты полноценно создаются только в тот момент, когда отображаются на экране. В этом я убедился когда создавал кучу динамических объектов и они начинали жрать память только тогда, когда я открывал вкладку с ними, а не тогда когда создавал их. Т.е. мой грид, пока я его не открою, вроде как бы и есть, но на самом деле визуально его ещё нет, в прямом смысле нет, а не просто он находится на другой вкладке. И к этому, ещё визуально не существующему объекту я начинаю цеплять более чем визуальные объекты, т.е. картинки. Сам грид то существует и картинки к нему соответственно присваиваются, о чём свидетельствует PictureBox, который замечательно их отображает. Но визуально, он (грид) ещё не существует и поэтому картинки получаются не визуальными объектами, а не более чем объектами типа Image и соответственно не отображаются. Наверное немного сумбурно, но надеюсь основную мысль передать удалось. 3. Завтра у меня нет времени, а послезавтра, если не получится решить проблему, выложу кусок проекта с гридом и картинками. Итого, главный вопрос по второму пункту, что с этим делать? Ну кроме очевидного и топорного решения, открывать вкладку с гридом, перед привязкой картинок? Может можно как-то до конца проинициализировать визуальный объект не отображая его? Если можно, то как?
0
|
|
|
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
|
||||||||
| 25.06.2013, 02:39 | ||||||||
они просто не отрисовываются пока вы не открыли окно с ними, поэтому они не жрут лишнюю память на отрисовку, но память под сам обьект они занимают, как и под все его св-ва и ссылки на связи
0
|
||||||||
|
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
|
|
| 25.06.2013, 11:51 [ТС] | |
|
Aloir, и что с этим делать? Как я уже сказал, пока грид не отрисуется, ему бесполезно присваивать картинки, они не отрисуются вместе с отрисовкой грида.
Как его отрисовать, не открывая? Или как заставить отрисоваться картинки? P.S. Я так полагаю, в сути проблемы мы сошлись и проект выкладывать нет смысла?
0
|
|
|
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
|
||
| 25.06.2013, 17:49 | ||
|
почему то мне кажется у вас где-то теряются ссылки на ваши обьекты и выходит такая бяка. потому как повторяюсь, у меня все ок работает: кинул таб контрол, на второй вкладке грид с колонкой под картинки, на первом табе кнопки на инициализацию строк картинкой - все ок работает
0
|
||
|
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
|
|
| 25.06.2013, 18:28 | |
|
0
|
|
|
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
|
|
| 25.06.2013, 23:54 [ТС] | |
|
Выдернул и выложил: http://yadi.sk/d/VI3e9kRD6Blfg
В проекте ничего лишнего, только демо проблемы. Там 2 архива и эксельный файл: в архиве test.rar сам проект, во втором архиве понятно картинки. Пару слов о том, что это, с чем едят и причём тут эксель файл. Источником данных для таблицы являются эксель файлы, в данном случае, что бы не перегружать проект, я взял всего 1 файл и открываю всего одну вкладку. Но картинки прикладываю все, т.к. разделить какие к каким файлам относятся нет никакой возможности, поэтому архив с картинками такой жирный. А дальше всё просто. Таб контрол, 2 вкладки, датагрид на второй. 2 кнопки, первая открывает эксель файл, загружает его в датасет и привязывает датасет к датагриду. Вторая присваивает картинки. Если грид отрисовался и мы привязываем картинки, то всё ок, если нет, то картинки не отображаются.
0
|
|
|
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
|
|
| 26.06.2013, 00:17 | |
|
архив с проектом test пустой, что то или перевырезали или не доложили...
0
|
|
|
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
|
|
| 26.06.2013, 12:33 [ТС] | |
|
0
|
|
|
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
|
|
| 27.06.2013, 01:34 | |
|
я вас скажу где ошибка, а вы уже сами исправляйте.
для грида добавтье метод DataBindingCompleate и скопируйте туда код от кнопки LoadPicture,и все поймете
1
|
|
|
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
|
||
| 27.06.2013, 01:58 [ТС] | ||
Но я видимо не такой понятливый... я довольно смутно представляю, почему этот способ работает, а через кнопку - нет. И насколько я не понятливый, настолько же и любопытный. Если не трудно, поясните в двух словах, в чём суть?
0
|
||
|
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
|
|
| 27.06.2013, 03:23 | |
|
ну попробую, у меня туго бывает с ясным выражением мыслей:
если вы добавите в тот метод еще какой-нт messagebox вы увидите когда отрабаывает bind на ваши данные с exceля, => при каждом бинде, у нас данные перезатягиваются и перезаполняется таблица => в наших pictureColumn.Value = null (и это видно кстати из дебага, научитесь пользоваться отладчиком он экономит время) => там просто нечего отоюражать. если нажать в вашем первоначальном примере, загрузить список, а потом картинки, и не открывая вкладку 2 таба, вывести значение например ячейки 0,0 - то картинка там будет(Значение Bitmap в Value), если активируем таб, то значение уже будет там null
1
|
|
| 27.06.2013, 03:23 | |
|
Помогаю со студенческими работами здесь
18
Странное поведение webBrowser Странное поведение Bitmap Странное поведение по тику таймера
Странное поведение panel при рисовании (появляется перечёркнутый прямоугольник) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|