Не работает сфокусированная строка — Gridview

#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, который вы хотите. Каждый раз, когда основная строка разворачивается и сворачивается, дочерняя строка создается и уничтожается соответственно.

Это должно дать вам немного больше информации.

http://documentation.devexpress.com/#WindowsForms/DevExpressXtraGridViewsGridGridView_GetDetailViewtopic

Комментарии:

1. Да, это имеет смысл. Мне немного стыдно, что я сам об этом не подумал: P Однако я не совсем понял вашу строку кода о том, как я должен получить представление, над которым я работаю.

2. Эта строка кода использует строку a в главном представлении, чтобы найти правильный detailGridview для этой строки masterRow. Итак, например, допустим, вы хотели получить доступ к DetailView для текущей сфокусированной строки MasterView. MasterGridView.GetVisibleDetailView(MasterGridView.GetFocusedRowHandle, 0) Если у вас есть конкретный пример, чтобы попытаться получить доступ к detailGrid для Let me know, я могу попытаться привести вам этот конкретный пример.

3. Каждая строка основного представления содержит собственное дочернее представление. Для того, чтобы выбрать элемент в дочернем представлении, вам нужно сначала найти основную строку, которая была выбрана. Это то, что делает строка кода. Он использует дескриптор выбранной строки основной строки для выбора правильной основной строки, а затем извлекает из нее подробный вид.