#vb.net #gridview #devexpress
#vb.net #просмотр сетки #devexpress
Вопрос:
Я использую Dev Express для разработки формы, в которой у меня есть GridControl с представлением внутри представления.
Это выглядит так:
Затем я пытаюсь использовать event ValidatingEditor для проверки пользовательского ввода. Я пытался сделать это, выполнив:
Private Sub grvObsAM_Artigos_ValidatingEditor(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs) Handles grvObsAM_Artigos.ValidatingEditor
Dim row As Integer = Me.grvObsAM_Artigos.FocusedRowHandle
Однако это всегда возвращает мне что-то вроде -99999..
Я покопался и попробовал это другое решение, используя отправителя из события:
Private Sub grvObsAM_Artigos_ValidatingEditor(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs) Handles grvObsAM_Artigos.ValidatingEditor
Dim grv As DevExpress.XtraGrid.Views.Grid.GridView = CType(sender, DevExpress.XtraGrid.Views.Grid.GridView)
Dim row As Integer = grv.FocusedRowHandle
И, используя это второе решение, мне удалось получить дескриптор сфокусированной строки. Несмотря на то, что на этот раз это сработало (потому что событие было вызвано самим представлением, и у меня был доступ к отправителю), это не решает мою проблему, поскольку есть другие события, в которых отправитель не является представлением, и проблема сохраняется.
Usign Me.grvObsAM_Artigos.»вставить что-нибудь здесь», похоже, не работает должным образом.
У кого-нибудь есть идеи о том, почему это происходит? Я что-то упустил?
С уважением,
Ответ №1:
Я думаю, что ваша проблема на самом деле в том, что у вас есть несколько просмотров сетки grvObsAM_Artigos. По одному для каждой строки, содержащей детали. Итак, вам нужно использовать представление выше ti для доступа к нужному. Использование:
Dim grv as XtraGrid.Views.Grid.GridView = grvObsAM.GetDetailView(RowHandle, 0)
Это должно дать вам правильный экземпляр GridView, который вы хотите. Каждый раз, когда основная строка разворачивается и сворачивается, дочерняя строка создается и уничтожается соответственно.
Это должно дать вам немного больше информации.
Комментарии:
1. Да, это имеет смысл. Мне немного стыдно, что я сам об этом не подумал: P Однако я не совсем понял вашу строку кода о том, как я должен получить представление, над которым я работаю.
2. Эта строка кода использует строку a в главном представлении, чтобы найти правильный detailGridview для этой строки masterRow. Итак, например, допустим, вы хотели получить доступ к DetailView для текущей сфокусированной строки MasterView. MasterGridView.GetVisibleDetailView(MasterGridView.GetFocusedRowHandle, 0) Если у вас есть конкретный пример, чтобы попытаться получить доступ к detailGrid для Let me know, я могу попытаться привести вам этот конкретный пример.
3. Каждая строка основного представления содержит собственное дочернее представление. Для того, чтобы выбрать элемент в дочернем представлении, вам нужно сначала найти основную строку, которая была выбрана. Это то, что делает строка кода. Он использует дескриптор выбранной строки основной строки для выбора правильной основной строки, а затем извлекает из нее подробный вид.