2013-03-22 4 views
3

Иногда XtraGrid получает красный крест вместо данных. (http://www.devexpress.com/Support/Center/p/CB4246.aspx, http://www.devexpress.com/Support/Center/p/A884.aspx и так далее)Красный Крест в DevExpress XtraGrid

Я позволил разбить на исключения (Ctrl + D, E, выбранные все исключения) - но я не уверен, что если что-то может случиться так, что красный corss приходит.

Есть ли простой способ, если вы находитесь в состоянии «XtraGrid показывает красный X», что XtraGrid может снова работать (насколько я видел только закрытие формы и ее повторное открытие).

Я searchign что-то вроде

GridView gridView = this. GridViewXYZ(objectview); 
// objectView is refreshed 
gridView.RefreshData(); // <- this can thorw an exception that data is not available/UI will get an red cross 
// ??? do something to reset the gridView in a workig condition 
+0

Вы рисуете методом OnPaint? это может вызвать ошибку [Красного Креста] [1]. [1]: http: // stackoverflow.com/questions/1000052/red-cross-problem-on-menustrip-and-toolstrip – Manuel

+0

Можете ли вы показать нам код, бросающий ошибку и ошибку, которую вы получаете? – Bit

+0

@AlwaysLearning Речь идет не о коде, бросающем ошибку. В большинстве случаев, когда возникает ошибка и известно состояние до исправления ошибки. Речь идет о состоянии, когда ошибка уже появилась. Это всегда могло случиться (в равной степени, насколько хорошо вы тестируете программу), что аппроксимация появляется только у клиента. Клиенту не следует беспокоиться о спонтанных красных скрещенных элементах, которые только исчезают у некоторых вуду. SO ищет способ восстановить из состояния ошибки. Образец, например, «if» error «then log» error «undo» last action » – Offler

ответ

1

есть простой способ, если вы находитесь в состоянии «XtraGrid показывает красный крестик» что XtraGrid может попасть на работу снова

Да, если вы никогда не попадаете в состояние ошибки в первую очередь. В противном случае обходным путем, закрытием/повторным открытием.

В статье, на которой вы ссылаетесь, есть информация о том, что вызывает появление "Red Cross of Death", либо во время рисования происходит необработанное исключение, вы обрабатываете событие CustomDraw элемента управления, и возникает исключение, или методы вызывается асинхронно.

Если у вас возникли трудности с определением причины проблемы, попробуйте воссоздать проблему в примерном проекте и отправить ее в службу поддержки DevExpress.

+0

Плохо то, что необработанное исключение может быть где-то сильно делом в самом XtraGrid. Поэтому его не ответ, как вернуть его к жизни. Если вы читаете о XtraGrids, даже изменение данных в DataSource может привести к RedX. Так что это просто не помогает только фиксировать известные проблемы, о том, что делать с ошибкой. Если вы посмотрите ответы на сайте DevExpress, я часто чувствую, что даже если многие люди жалуются на проблему для DevExpress, это не проблема (например, не анимированные gifs - обходной путь, DatagridSource не может быть изменен - ​​не меняйте DataGrid Source и т. Д. pp.) – Offler

+1

Почему downvote? Если у вас возникли трудности с определением причины проблемы, создайте репродукцию голой кости и отправьте ее в DevExpress. –

+0

+1 Это лучший ответ. – kenrogers

2

Из моего предыдущего опыта GDI, когда вы в этом состоянии, вы застряли. Вы сделали что-то, что вызвало проблему в GDI, и ему не удалось выбросить исключение/восстановить его.

Акт закрытия/повторного открытия формы приводит к тому, что объект GDI, который не управляется, освобождается и воссоздается, и, следовательно, GDI полностью работает снова, пока не произойдет такое же условие ошибки. Если вы не можете предотвратить эту ошибку, вы можете попытаться воссоздать новый объект GDI для формы/элемента управления, но я не уверен, как вы это сделаете.

Действительно, это ошибка, которую, вероятно, должна решить команда DevExpress.

0

Имея такую ​​же проблему, иногда с расширением Visusa Studio CodeRush (также предоставленным devExpress) при отображении диалога ссылок. Так что это внутренняя проблема. Надеюсь, что следующая версия devexpress устранит проблему.

2

Вы можете попытаться позвонить по телефону BeginInvoke на Grid.

Action a =() => gridView.RefreshData(); 
gridView.GridControl.BeginInvoke(a); 

Всякий раз, когда вы сталкиваетесь с источником данных, вы можете попробовать его обернуть в таком заявлении.

У меня вышло что-то симулятивное, и вы будете удивлены, как часто это работает.

+0

REfreshData() имеет тип void. Если я попробую ваше решение, я получаю только: неявное преобразование из типа «void» в Action невозможно. – Offler

+0

Но не должен ли пункт Action использовать метод, который возвращает void? devexpress thingy является «public override void RefreshData(); ' – Offler

+0

Да, вы правы - я обновил ответ. Мой синтаксис был неправильным -sry –

Смежные вопросы