| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Базы данных под .NET > StackOverflowException при VirtualMode |
| Автор: Grandpa 28.7.2008, 16:51 |
| Никто не сталкивался с такой проблемой. В таблице хранятся "приход" и "расходы", т.е. существует поле, которое содержит ключ записи в той же таблице. Отношение один-ко-многим в одной таблице. Соответственно два DataGridView, первый отображает "приходы", а второй "расходы" (для каждого "прихода" из 1-го грида). Всё работает нормально до тех пор, пока во втором гриде не устанавливаешь VirtualMode=true и не делаешь поле для этого режима (для подсчета разности двух полей таблицы). При загрузке формы вываливается StackOverflowException. Поэкспериментировал, StackOverflowException вываливается даже тогда, когда в поле просто заносишь число! Похоже, где-то образуется рекурсия, но где? |
| Автор: Partizan 28.7.2008, 17:32 | ||
| Grandpa, часто бывает, когда по невнимательности получается такое свойство:
|
| Автор: Grandpa 28.7.2008, 17:43 | ||
Спасибо, запомню на будующее. Но в данном случае не то.
|
| Автор: Partizan 28.7.2008, 17:46 |
| Grandpa, а под отладчиком никак не посмотреть на чём именно зацикливается программа? |
| Автор: Grandpa 28.7.2008, 19:56 |
| Просматривал. В сгенерированном коде, когда Resume для первого грида. Точнее показать не могу, т.к. сейчас я дома. Завтра с работы дам отрывок кода. Есть предположение, что надо поменять порядок генерации (через taborder), сначала 1-й граид, потом 2-й (сейчас наоборот). |
| Автор: Grandpa 29.7.2008, 10:00 |
| Ещё раз пошёлся отладчиком. Картина такая. При создании окна успешно проходит инициализация компонентов. Затем несколько обращенией к CellValueNeeded для создания виртуальных колонок для 1-го грида, затем много обращений к CellValueNeeded для 2-го грида и, похоже, в этом месте безконечный цикл. Обращения происходят из кода недоступного отладчику. |
| Автор: Grandpa 29.7.2008, 10:55 | ||
Ура! Разобрался сам. Моя вина. Для других гридов делал правильно, а в этом бес попутал!
Нельзя напрямую устанавливать значение ячейки, только через параметр e! |