Jagadisha_Ingenious Ответов: 1

Исключение переполнения стека.


Всем Привет,

У меня есть datagrid, который содержит столбец datagridCombobox в приложении windows form. Проблема в том, что при изменении значения combobox он не создает никаких исключений при загрузке формы. Но когда диалоговое окно открывается и закрывается для изменения значения другой ячейки и пытается изменить выделение в столбце datagridcombobox, оно вызывает исключение переполнения стека. При проверке с помощью трассировки стека он показывает, что событие привязки данных запускается несколько раз. Используемая Datagrid-это очень старая версия.

1-й раз, когда сетка загружается & если я пытаюсь изменить значения привязки даже не срабатывает, только после того, как диалоговое окно открыто & закрыто такая ошибка возникает.

Что я уже пробовал:

int Columnindex = GetColumnIndex(columnName + "New");
                            DataGridViewComboBoxCell ComboBoxCell2 = new DataGridViewComboBoxCell();
                            ComboBoxCell2.DataSource = null;
                            ComboBoxCell2.DataSource = filteredOptions;
                            ComboBoxCell2.DisplayMember = ComboboxColumn.DisplayMember;
                            ComboBoxCell2.ValueMember = ComboboxColumn.ValueMember;
                            ComboBoxCell2.FlatStyle = FlatStyle.Flat;
                            ComboBoxCell2.DropDownWidth = 250;//shreyasimportant
                            this.gdbgGrid[Columnindex, gdbgGrid.CurrentCell.RowIndex] = ComboBoxCell2;
                            ComboBoxCell2.DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton;

                            System.Diagnostics.Debug.WriteLine("UTConfig - Step - setComboBoxBasicFilteredType()    ComboboxCellValue" + ComboBoxCell2.DisplayMember.ToString() + "  value is-  :: " + ComboBoxCell2.Value.ToString() + "" + gdbgGrid.Name);

                            if (m_ComboDirtyStateChanged) 
                            {
                                if (columnName != "Revision") 
                                {                                  
                                    ComboBoxCell2.Value = Convert.ToString(filteredOptions[0][ComboboxColumn.DisplayMember]); //Commenting this line of code eliminates stack overflow exception & value is hidden in the combobox cell. Clicking the combobox cell the value appears.Need an alternative way to display the value.
                                }
                            }

                            System.Diagnostics.Debug.WriteLine("UTConfig - Step8 - setComboBoxBasicFiltered() - column exists- end  :: " + gdbgGrid.Name);

1 Ответов

Рейтинг:
0

OriginalGriff

Из этого фрагмента мы не можем точно сказать, что вызывает проблему, и даже с полным проектом мы, вероятно, тоже не сможем этого сделать, поскольку у нас нет доступа к вашим данным. К сожалению, такого рода проблемы должны быть исследованы во время выполнения кода, что мы не можем сделать. Так что это будет в значительной степени зависеть от вас.

Давайте начнем с объяснения, чем вызвано исключение переполнения стека: рекурсией, преднамеренной или случайной. Когда метод прямо или косвенно вызывает повторное выполнение метода. Это может произойти случайно, когда обработчик событий вносит изменения, которые приводят к повторному запуску события до его завершения (хотя в большинстве случаев вам нужно использовать DoEvents, чтобы это произошло, есть события, где это может произойти "естественно").

Итак, начните с отладчика и посмотрите на трассировку стека при срабатывании исключения. Что делает ваш код? Какой метод является рекурсивным? Трассировка даст вам имя метода, файл и номер строки, так что это довольно просто. Поставьте там точку останова и запустите ее снова. Следуйте коду до конца, и вы должны начать видеть, где он рекурсирует и, надеюсь, почему.
Извините, но мы не можем сделать ничего из этого для вас!