Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> StackOverflowException при VirtualMode 
V
    Опции темы
Grandpa
Дата 28.7.2008, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.7.2003
Где: Одесса

Репутация: нет
Всего: нет



Никто не сталкивался с такой проблемой.
В таблице хранятся "приход" и "расходы", т.е. существует поле, которое содержит ключ записи в той же таблице. Отношение один-ко-многим в одной таблице. 
Соответственно два DataGridView, первый отображает "приходы", а второй "расходы" (для каждого "прихода" из 1-го грида).

Всё работает нормально до тех пор, пока во втором гриде не устанавливаешь VirtualMode=true и не делаешь поле для этого режима (для подсчета разности двух полей таблицы). При загрузке формы вываливается StackOverflowException. Поэкспериментировал, StackOverflowException вываливается даже тогда, когда в поле просто заносишь число!

Похоже, где-то образуется рекурсия, но где?

PM ICQ   Вверх
Partizan
Дата 28.7.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67



Grandpa
часто бывает, когда по невнимательности получается такое свойство:

Код

private double myField;

public double MyField
{
   get {return MyField;} //MyField вместо myField
   set {MyField = value;}//тоже.
}



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Grandpa
Дата 28.7.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.7.2003
Где: Одесса

Репутация: нет
Всего: нет



Спасибо, запомню на будующее. Но в данном случае не то.

Код

        private void tbMovementDataGridView_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
        {
            DataGridView grid = sender as DataGridView;
            DataGridViewRow rw = grid.Rows[e.RowIndex];
            if (grid.Columns[e.ColumnIndex].Name == "Column1")
            {
                rw.Cells["Column1"].Value = 1;  // Если закоментировать эту строку, то всё работает нормально.
            }
        }

PM ICQ   Вверх
Partizan
Дата 28.7.2008, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67



Grandpa, а под отладчиком никак не посмотреть на чём именно зацикливается программа?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Grandpa
Дата 28.7.2008, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.7.2003
Где: Одесса

Репутация: нет
Всего: нет



Просматривал. В сгенерированном коде, когда Resume для первого грида. Точнее показать не могу, т.к. сейчас я дома. Завтра с работы дам отрывок кода. Есть предположение, что надо поменять порядок генерации (через taborder), сначала 1-й граид, потом 2-й (сейчас наоборот).
PM ICQ   Вверх
Grandpa
Дата 29.7.2008, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.7.2003
Где: Одесса

Репутация: нет
Всего: нет



Ещё раз пошёлся отладчиком. Картина такая. При создании окна успешно проходит инициализация компонентов. Затем несколько обращенией к CellValueNeeded для создания виртуальных колонок для 1-го грида, затем много обращений к CellValueNeeded для 2-го грида и, похоже, в 
этом месте безконечный цикл.  Обращения происходят из кода недоступного отладчику.

PM ICQ   Вверх
Grandpa
Дата 29.7.2008, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.7.2003
Где: Одесса

Репутация: нет
Всего: нет



Ура! Разобрался сам. Моя вина. Для других гридов делал правильно, а в этом бес попутал! smile 
Код

        private void tbMovementDataGridView_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
        {
            DataGridView grid = sender as DataGridView;
            DataGridViewRow rw = grid.Rows[e.RowIndex];
            if (grid.Columns[e.ColumnIndex].Name == "Column1")
            {
//             rw.Cells["Column1"].Value = "12345";  // Ошибка!!!!!!!!!!!!!!!
                e.Value = "12345";
            }
        }

Нельзя напрямую устанавливать значение ячейки, только через параметр e! smile 
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.