powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XtraGrid + LINQ2SQL, обработка ошибок БД
36 сообщений из 36, показаны все 2 страниц
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38447670
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Голову сломал, не могу найти решения.
Использую XtraGrid в приложении WinForms. Источник данных - LINQ2SQL классы (DataContext). При сохранении изменений может возникнуть ошибка на стороне БД - например, нарушение уникальности, целостности, ошибка в триггере или еще что-то, то есть, не всю валидацию возможно выполнить в ValidateRow.
Хочу, чтобы при возникновении ошибки во время сохранения изменений в БД юзер получал соответствующее уведомление и оставался на изменяемой строке. Не могу найти способ это сделать :(

Имеются 2 события, теоретически подходящие для задачи:

1) GridView.ValidateRow - но здесь еще рано постить изменения в базу данных, т. к. записи в источнике данных к этому моменту еще не изменены
2) GridView.RowUpdated - можно сделать SubmitChanges(), но непонятно, как оставить юзера на этой же строке в случае ошибки. В частности, если юзер инициировал сохранение изменений переводом фокуса на другую строку грида, то фокус все равно уйдет с ошибочной строки, даже если поставить SetColumnError(). Окей, пробовал не давать уводить фокус с ошибочной строки с помощью:
Код: c#
1.
2.
3.
4.
        private void myGridView_BeforeLeaveRow(object sender, DevExpress.XtraGrid.Views.Base.RowAllowEventArgs e)
        {
            e.Allow = !gvHourlyRate.HasColumnErrors;
        }


фокус вообще пропадает :(

Существует ли некий общий паттерн или ваше работающее решение для обработки ошибок уровня БД при сохранении изменений строки в ХtraGrid?
Спасибо :)
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38448531
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели ни у кого вопроса не возникало? Как такое может быть? :)
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38449029
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Gurianovнарушение уникальности, целостности, ошибка в триггере или еще что-то, то есть
С этого момента поподробней, плиз.
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38449060
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АбсолютDmitry Gurianovнарушение уникальности, целостности, ошибка в триггере или еще что-то, то есть
С этого момента поподробней, плиз.
1) Нарушение уникального индеска
2) Неверный FK
3) Триггер БД или хранимка, с помощью которой добавляется/обновляется запись, вызывает ошибку
4) Вообще любые ошибки уровня БД
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38449071
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну теоретически, некоторые ошибки можно предотвратить уже на клиенте. Это чисто моё ИМХО.
Далее, как я понимаю, каждый роу это у нас отдельный объект? Ну, к примеру, Person etc.

И в данном случае объекта, к примеру, можно иметь проперть, которая отображала бы значение, как было сохранено или не сохранено в бэдэ, к примеру CommitStatus.

По поводу XtraGrid не подскажу, не работал с ним (как задержать пользователя на одной из записи).
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38449215
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АбсолютНу теоретически, некоторые ошибки можно предотвратить уже на клиенте. Это чисто моё ИМХО.
Далее, как я понимаю, каждый роу это у нас отдельный объект? Ну, к примеру, Person etc.

И в данном случае объекта, к примеру, можно иметь проперть, которая отображала бы значение, как было сохранено или не сохранено в бэдэ, к примеру CommitStatus.

По поводу XtraGrid не подскажу, не работал с ним (как задержать пользователя на одной из записи).

Конечно, ошибки лучше предотвращать на клиенте, но это невозможно для 100% случаев. Статус сохранения не нужен - там и так понятно, вопрос относится скорее к специфике XtraGrid.
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38449226
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry GurianovАбсолютНу теоретически, некоторые ошибки можно предотвратить уже на клиенте. Это чисто моё ИМХО.
Далее, как я понимаю, каждый роу это у нас отдельный объект? Ну, к примеру, Person etc.

И в данном случае объекта, к примеру, можно иметь проперть, которая отображала бы значение, как было сохранено или не сохранено в бэдэ, к примеру CommitStatus.

По поводу XtraGrid не подскажу, не работал с ним (как задержать пользователя на одной из записи).

Конечно, ошибки лучше предотвращать на клиенте, но это невозможно для 100% случаев. Статус сохранения не нужен - там и так понятно, вопрос относится скорее к специфике XtraGrid.


Вы неправильно мыслите. XtraGrid это все-го лишь редактор данных (коллекции). Максимум за что он может отвечать - за валидность типов (чтобы в свойства с инт не пихали значения с типом стринг).

Отбросьте XtraGrid из цепочки своих рассуждений. У вас есть инструмент, который умеет проверять один объект коллекции до запроса в базу?
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38449233
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LameUserВы неправильно мыслите. XtraGrid это все-го лишь редактор данных (коллекции). Максимум за что он может отвечать - за валидность типов (чтобы в свойства с инт не пихали значения с типом стринг).

Отбросьте XtraGrid из цепочки своих рассуждений. У вас есть инструмент, который умеет проверять один объект коллекции до запроса в базу?

Спасибо, не первый год замужем :)
Проверить объект до запроса в базу я, конечно, могу, но проверить не на всё. Представьте, что один юзер выбрал в UI запись для редактирования, полчаса тупил, а потом попытался сохранить, и в этот момент в БД уже перестал существовать FK, на который ссылается его запись, потому как другой юзер его 10 минут назад похерил. Можно, конечно, перед каждым сохранением лазить в базу и проверять наличие всех связей, но это 1) дорого 2) все равно не обеспечивает 100% надежности, ну а мутить хитрую транзакцию ради каждой операции записи мы не рассматриваем. Суть вопроса, собственно, в том, как перехватить ошибку, если она возникла при сохранении уже проверенной записи. Не все проверки целостности целесообразно переносить в клиента, есть функционал БД и он работает. Просто очень не хватает события XtraGrid.OnUpdating ()с параметром типа e.Success, где я могу делать свои проверки и сообщать XtraGrid-у об ошибке.
При сохранении строки XtraGrid изменяет запись в подлежащем BindingSource, который, в свою очередь, предоставляет запись из DataContext. И нигде в этом слоеном пироге я не могу найти места, чтобы сразу после изменения записи сделать DataContext.SubmitChanges() так, чтобы ошибка вернулась наверх в XtraGrid непосредственно в процедуру сохранения и этим хотя бы вызвала XtraGrid.InvalidRowException().
Сохранение записи выглядит примерно так:
Код: c#
1.
2.
3.
4.
5.
<XtraGrid.ValidateRow>(здесь делается возможная проверка на клиенте и еще рано постить изменения)
<XtraGrid.UpdateRow>
    <изменение записи в BindingSource>(1)
        <добавление/изменение записи в DataContext>(2)
<XtraGrid.OnRowUpdated>(3)



В (1) и (2) не знаю события, на которое можно повесить SubmitChanges(). В (3) вызвать можно, но не знаю, как удержать фокус на ошибочной строке в XtraGrid.
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38449266
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Gurianov,

Еще раз, зачем вам какие-то события.

Давайте я примерно опишу сценарий, а вы скажите что здесь не так.

В определенный момент времени вы вызываете сохранение данных (как я понял это построчно):


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
// Если вы по каким то причинам теряете фокус последней строки:
int _previousFocusedRowHandle;
GridView.FocusedRowChanged += (sender, e) => _previousFocusedRowHandle = e.PrevFocusedRowHandle);


void SaveChanges()
{
try
{
      _dataSource.Save(); //сохранение в БД
}

catch(exception e)
{ 
// Выставить фокус в пред. строку (если пропал)
      GridView.FocusedRowHandle = _previousFocusedRowHandle;
// получение списка колонок с ошибками если нужно (и возможно) вспомогательный класс GridColumn + Message
      var errorColumns = GetErrorColumns(e);
      errorColumns.ForEach(errorColumnWithMessage =>  GridView.SetColumnError(errorColumnWithMessage.Column, errorColumnWithMessage.Message);
}
 



}

Код писался без проверки в "блокноте".
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38449374
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже на баг в XtraGrid. Этот код:
Код: c#
1.
2.
3.
4.
        private void gv_BeforeLeaveRow(object sender, DevExpress.XtraGrid.Views.Base.RowAllowEventArgs e)
        {
            e.Allow = !gvHourlyRate.IsNewItemRow(e.RowHandle);
        }


не сохраняет фокус на созданной строке.

LameUser, если не справлюсь с событиями, попробую ваш подход. Кстати, а как отменить стандартную процедуру сохранения изменений, если уж включать свой обработчик?
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38449759
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry GurianovПохоже на баг в XtraGrid. Этот код:
Код: c#
1.
2.
3.
4.
        private void gv_BeforeLeaveRow(object sender, DevExpress.XtraGrid.Views.Base.RowAllowEventArgs e)
        {
            e.Allow = !gvHourlyRate.IsNewItemRow(e.RowHandle);
        }


не сохраняет фокус на созданной строке.

LameUser, если не справлюсь с событиями, попробую ваш подход. Кстати, а как отменить стандартную процедуру сохранения изменений, если уж включать свой обработчик?

По идее никак. Если честно я не знаком с LINQ2SQL, может у него есть какой-то инструментарий, который позволяет открыть транзакцию, отправить запрос на сервер в рамках этой транзакции и если ошибка - откатить транзакцию. Но даже если Insert/Update/Delete строки не прошел - ничего страшного, на сервере не будет битых данных.
Если вы хотите вернуть первоначальные данные строки в коллекции до редактирования - либо их кэшировать где-то перед изменением, либо использовать шаблон command, чтобы иметь возможность обратного отката (не всегда легко реализуемо).
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38450316
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
либо я чего-то не понимаю... по идее, у любого, кто юзает грид с L2S или EF должен вставать сей вопрос - но нет, весь тырнет перерыл(
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38450319
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Gurianov,

че тебе надо?
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38450320
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosDmitry Gurianov,

че тебе надо?

большую кучу бабла. А по программированию - ветка вверху.
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38450333
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Gurianov,

ну установи фокус принудительно
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38450338
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ваще редко такое нуно, че строку какую то хранить не все ж однострочные
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38450342
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosа ваще редко такое нуно, че строку какую то хранить не все ж однострочные

вообще не понял камента
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38450371
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry GurianovViPRosа ваще редко такое нуно, че строку какую то хранить не все ж однострочные

вообще не понял камента
Дим, расслабь булки, всё можно. Сейчас нет времени писать код, во вторник покажу тебе примерчик.
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38450378
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Gurianov, и ты прально смотришь, надо делать только на BeforeLeaveRow, по другому никак.
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38450383
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaDmitry Gurianov, и ты прально смотришь, надо делать только на BeforeLeaveRow, по другому никак.

К сожалению, e.Allow = false не срабатывает, если речь идет о новой записи. Фокус вообще исчезает из грида.
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38450452
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, щас будет адов костыль. Беременных, нервных и детишек просьба увести от экрана, новички программирования также не смотрят сюда, а профессионалы запасаются носовыми платками и поп-корном.
На данный момент, после убийства многих часов, в жесточайших муках рожден данный вариант, который позволяет юзеру видеть ошибки, произошедшие в БД при сохранении записи из XtraGrid.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
        public struct RowSubmitErrorState
        {
            public bool IsError;
            public bool IsNewRow;
            public string ErrorText;
        }

        private RowSubmitErrorState _rses = new RowSubmitErrorState() { IsError = false };

        private void gvHourlyRate_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            // тут вся возможная клиентская валидация. 
            // Сохранить изменения в БД, чтобы поймать и обработать ее внутреннюю ошибку, тут невозможно, 
            // т.к. UpdateCurrentRow не приведет к немедленному обновлению BindingSource, и ctx.SubmitChanges() будет бессмысленен и беспощаден
        }

        private void gvHourlyRate_RowUpdated(object sender, DevExpress.XtraGrid.Views.Base.RowObjectEventArgs e)
        {
            // здесь BindingSource уже обновился и можно сохранять изменения в базу.
            // Но если обновение строки вызвано переносом фокуса юзером на другую строку, то
            // ничто его здесь не остановит =( Строка будет на экране, данные - пендиться в контексте, а в базе - тишина, покой и бездуховность

            try
            {
                _ctx.SubmitChanges();
            }
            catch (Exception ex)
            {
                // припомним ошибочку
                _rses.IsError = true;
                _rses.IsNewRow = gvHourlyRate.IsNewItemRow(e.RowHandle);
                _rses.ErrorText = ex.GetBaseException().Message;
                // сам RowHandle запоминать бесполезно: для новых строк он равен типа -247#$#*^^$^, а для XtraGrid-a такой хендл - страшно тайное место, фокус туда не поставишь, и ваще кыш!
            }
        }

        private void gvHourlyRate_BeforeLeaveRow(object sender, DevExpress.XtraGrid.Views.Base.RowAllowEventArgs e)
        {
            // сохранение изменений в источнике уже произошло. Но из-за (вероятно) бага в XtraGrid, данный код:
            // e.Allow = !gvHourlyRate.IsNewItemRow(e.RowHandle);
            // не предотвратит уход фокуса, если строка была только что создана. Фокус просто вообще исчесзнет с экрана =(
        }

        private void gvHourlyRate_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
        {
            // Это очень прекрасное место, которое идеально подошло бы для обработки серверных ошибок... 
            // ...если б в него можно было попасть из подлежащих BindingSource и прочих L2S или EF
            // Очень-очень прекрасное место.
        }

        private void bsHourlyRate_ListChanged(object sender, ListChangedEventArgs e)
        {
            // Эта хрень вызывается на каждый чих. То есть, на любое изменение пропертей редактируемого объекта.
        }

        private void gvHourlyRate_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            // и вот только тут, через жопу, мы можем вернуть фокус на ошибочную строку
            // смотрим, была ли ошибочка:
            if (_rses.IsError)
            {
                // сразу ее сбросим, чтоб дальнейший код не впал в рекурсию
                _rses.IsError = false;
                
                // попросим вернуть фокус взад
                // кстати, RowHandle свежесозданной строки, по недокументированной инфе, найденной на задворках гугля,
                // равняется RowCount-1
                gvHourlyRate.FocusedRowHandle = _rses.IsNewRow? gvHourlyRate.RowCount-1 : e.PrevFocusedRowHandle;

                // это чтобы при попытке юзера тихо свалить со строки его снова обшарили на оружие и наркотики
                gvHourlyRate.SetFocusedRowModified();

                // чоуш, можно и показать ошибку
                gvHourlyRate.SetColumnError(gvHourlyRate.GetVisibleColumn(0), _rses.ErrorText);
            }
        }
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38452695
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Gurianov, это мега костыль нет слов.
Рекомендую открыть для себя интерфейс IEditibleObject. Второе добавлять строки не в грид, а в источник строки и третье, добавлять новую строку сразу при загрузки грида, а при редактировании, добавлять новую сразу без инсерта, надеюсь понятно о чём я.
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38452698
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и не надо использовать LINQ2SQL для гридов, лучше уж EF.
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38452711
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaРекомендую открыть для себя интерфейс IEditibleObject.

Я знаю интерфейс IEditibleObject. Давайте общаться с уважением, за*бал скульрушный пафос. Не считайте других за дебилов.

авторВторое добавлять строки не в грид, а в источник строки

В чем смысл этого?

автори третье, добавлять новую строку сразу при загрузки грида, а при редактировании, добавлять новую сразу без инсерта, надеюсь понятно о чём я.

конечно, нет. В чем смысл?

автори не надо использовать LINQ2SQL для гридов, лучше уж EF.

и опять же - с чего?
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38452718
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Gurianovprivate void gvHourlyRate_BeforeLeaveRow(object sender, DevExpress.XtraGrid.Views.Base.RowAllowEventArgs e)
{
// сохранение изменений в источнике уже произошло. Но из-за (вероятно) бага в XtraGrid, данный код:
// e.Allow = !gvHourlyRate.IsNewItemRow(e.RowHandle);
// не предотвратит уход фокуса, если строка была только что создана. Фокус просто вообще исчесзнет с экрана =(
}
и это в корне неверно. всё работает. надо проверять не так.
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38452725
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Progaи это в корне неверно. всё работает. надо проверять не так.

Прошу вас показать код, который решит данный простой сценарий:

1. Юзер добавляет новую запись, устанавливает ей поля
2. Юзер пытается перевестифокус на другую строку (чем вызывает сохранение изменений в БД)
3. Внутри БД сохранение этой записи происходит с любой на выбор ошибкой
4. Юзеру не удается перевести фокус и он видит сообщение об ошибке
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38452731
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, и заодно:
Dmitry Gurianovprivate void gvHourlyRate_BeforeLeaveRow(object sender, DevExpress.XtraGrid.Views.Base.RowAllowEventArgs e)
{
e.Allow = !gvHourlyRate.IsNewItemRow(e.RowHandle);
}

попробуйте этим сохранить фокус, если он уводится от новой записи.
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38452733
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry GurianovProgaРекомендую открыть для себя интерфейс IEditibleObject.

Я знаю интерфейс IEditibleObject. Давайте общаться с уважением, за*бал скульрушный пафос. Не считайте других за дебилов.

авторВторое добавлять строки не в грид, а в источник строки

В чем смысл этого?

автори третье, добавлять новую строку сразу при загрузки грида, а при редактировании, добавлять новую сразу без инсерта, надеюсь понятно о чём я.

конечно, нет. В чем смысл?

автори не надо использовать LINQ2SQL для гридов, лучше уж EF.

и опять же - с чего?
так по порядку, раздолбайство разрабов от девок всем известно, я им не раз уже писал. второе, чтобы от этого раздолбайства не зависить надо управлять не самим гридом, а только реагировать на события грида в источнике строк, тогда ты будешь не зависим от конкретного грида, я и телерик и компонентван, и чего только не попробывал.
Далее, не надо пользоваться их поделим newrow, это говно, я в него как-то давно вляпался, поковырялся и перестал использовать, поэтому делал свою реализацию, поэтому у меня фокус никуда не исчезает.
далее. у меня в beforeleave вообще вот так написано.
Код: c#
1.
2.
3.
4.
private void gridView3_BeforeLeaveRow(object sender, RowAllowEventArgs e)
        {
            e.Allow = _valid_flag_employeework;
        }


а флаг я меняю вот так
Код: c#
1.
2.
3.
4.
public void SetEmployeeWorkByPlanRowValidatingState(bool state)
        {
            _valid_flag_employeework = state;
        }


а это метод вызываю вот так
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38452736
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
public void OnEndValidateEmployeeWorkByPlan(object sender, object lst)
        {
            GridListErrorHelper.MarkErrorColumns(gridView3, lst as IEnumerable<GridListErrorHelper>, sender as ValidateRowEventArgs);
            SetEmployeeWorkByPlanRowValidatingState((sender as ValidateRowEventArgs).Valid);
        }
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38452741
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот этот метод уже вызывается из презентера
Код: c#
1.
2.
3.
4.
5.
void _view_ValidateEmployeeWorkColumns(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            object helper = Model.ValidateEmployee(_view.SelectedRecordEmployeeWork);
            _view.OnEndValidateEmployeeWorkByPlan(e, helper);
        }


а дальше самое интересное
Код: c#
1.
_view.ValidateEmployeeWorkColumns += _view_ValidateEmployeeWorkColumns;


и во вью вот так
Код: c#
1.
2.
3.
4.
private void gridView3_ValidateRow(object sender, ValidateRowEventArgs e)
        {
            OnValidateEmployeeWorkColumns(e);
        }
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38452755
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и дополнительно, чтобы было совсем понятно, я строку новую уже сразу имею в гриде, аля Access, с него собственно и переводил организацию, где используется вся эта каша. в WPF всё намного проще. рекомендую на будущее туда глядеть.
дополню, как только пользователь пытается изменить что-нибудь в новой строке, тут же добавляется новая, а фокус замечу, никуда не уходит
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38452766
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Progaи дополнительно, чтобы было совсем понятно, я строку новую уже сразу имею в гриде, аля Access, с него собственно и переводил организацию, где используется вся эта каша. в WPF всё намного проще. рекомендую на будущее туда глядеть.
дополню, как только пользователь пытается изменить что-нибудь в новой строке, тут же добавляется новая, а фокус замечу, никуда не уходит

ну вот с уводом фокуса от новой у них все через ж*пу, не работает. И обойти эту хрень - тоже костыли городить.
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38452996
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proga, какие еще знаете достойные гриды, кроме XtraGrid? У меня все, я готов на тяжкие преступления (
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38453581
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Gurianov, telerik более менее. Всё остальное совсем плохо
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38453614
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaDmitry Gurianov, telerik более менее. Всё остальное совсем плохо

Спасибо, им и занялся уже. Все равно надо знать.
...
Рейтинг: 0 / 0
XtraGrid + LINQ2SQL, обработка ошибок БД
    #38453616
Dmitry Gurianov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, они привели пример кода , решающего некоторые описанные проблемы. Поверхностно пробежался - тоже на костыль похоже, но сначала побьюсь с телериком, раз уж начал.
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XtraGrid + LINQ2SQL, обработка ошибок БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]