Xaoc666
Newbie | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Приветствую Вас. Обнаружил ошибку в cxGrid 6. Причем она не изчезла и в февральской сборке. Суть ее в следующем: Создаем грид с мастерь-деталь вьюхами. В частности, вьюхи работают в provider-mode, т.е. через наследника TcxCustomDataSource. Для каждой вьюхи устанавливаем свойства опций данных Appending = true; Таким образом если выделена последняя запись вьюхи (мастера или детали, не важно) и пользователь нажимает стрелку вниз, то появляется новая пустая запись для вставки. Если нажать стрелку вниз повторно, то ситуация такая: 1. Если новая запись является новой записью мастера, то все ок. 2. Если новая запись является новой записью детали, и запись мастера не последняя в гриде, то все ок (в февральской сборке. В ноябрьской происходил Access violation). 3. Если новая запись является новой записью детали, и запись мастера _последняя_ в гриде, то Access Violation происходит даже в февральской сборке, т.е. ошибка не изчезла полностью. В кноуледжбэйз этот вопрос поднимался счастливым обладателем лицензионной копии. (BugReport ID: CB4425, https://www.devexpress.com/Support/Center/ViewIssue.aspx?issueid=CB4425&searchtext=Access+Violation&pgid=48409584-e723-41af-b1d3-52dd97577823&pid=8b369e9e-f81b-4a73-822e-37c84ccafcf7). Но разработчикам не удалось воспроизвести глюк, и я думаю, что это потому, что в их примере они используют ДБ вьюхи, в которых все действительно работает. Глюк видимо присущ именно provider-mode. Покопался в исходниках, и мне показалось, что причина в функции FocusNextRecord(...) класса TcxGridTableView. В случае 3. в ней происходит вызов функции CreateNewRecord(True) но у другой вьюхи (у вьюхи мастера), а затем происходит завершение вызова обработчика стрелки вниз для вьюхи-деталей, которая уже уничтожилась при потере фокуса! Вопрос к Вам. Может быть кто-то разбирался с этой ошибкой подробнее? Или даже лечил ее? Поделитесь опытом. Спасибо. |