Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > XtraGrid от DevExpress. На какой строке я ?


Автор: vlsaf 29.10.2007, 22:32
Есть gridView. (не мелкосовтовский, а от DevExpress)

Надо при закрытии формы запомнить строку, там где находится курсор.
А при загрузки формы переместить курсор в нужное место.

1. Как определить, на в какой позиции (на какой строке) грида находится курсор?
2. Как переместиться на строку N ?

Вопросы элементарные. 
Я тока с этим гридом начал разбираться всерьез smile

Автор: thomas 29.10.2007, 22:59
vlsaf, 
Цитата

1. Как определить, на в какой позиции (на какой строке) грида находится курсор?

У MS это CurrentCell
Посмотри подобное у Dеv-вов.
Цитата

2. Как переместиться на строку N ?

У MS есть свойства у DataGridView.CurrentRow.Index 
Просмотри свойства грида от Dev-вов, что они там пишут.

Автор: ivashkanet 30.10.2007, 10:44
Если нужно тупо сохранять/загружать то подойдет такое: 
Код
GridView.FocusedRowHandle

Если нужно что-нить посложнее, то у мя есть пример кода (разберешься сам):
Код

            ' поиск выделенной строки
            Dim focusedRowsCount As Integer =GridView.GetSelectedRows().Length
            If focusedRowsCount > 0 Then
                Dim focusedRowNumber As Integer = GridView.GetSelectedRows()(0)
                If focusedRowNumber >= 0 Then
                    Dim row As System.Data.DataRowView = CType(GridView.GetRow(focusedRowNumber), DataRowView)

                    value= row("SOME_COLUMN").ToString()
                End If
            End If

            ' выделение нужной строки
            Dim dataTable As DataTable = CType(GridControl.DataSource, Data.DataTable)
            Dim dataRows As DataRow() = dataTable.Select(String.Format("[SOME_COLUMN]='{0}'", value))

            If dataRows.Length > 0 Then
                Dim rowHandle As Integer = GridView.GetRowHandle(dataTable.Rows.IndexOf(dataRows(0)))
                GridView.FocusedRowHandle = rowHandle
            End If

Автор: vlsaf 30.10.2007, 11:22
Мужики, спасибо! 

Автор: ivashkanet 30.10.2007, 12:10
Заходи, типа, еще ;-)

Автор: IGV 25.11.2010, 14:59
Так отрыл эту тему, после возникшей у меня проблемы
Есть некий dataTable у него, предположим, 3 строчки:

row0 (RowState = RowState.Deleted)
row1 (RowState = RowState.Unchanged)
row2 (RowState = RowState.Unchanged)

естественно gridView отображает только 2 строки row1 и row2.
теперь нам нужно установить фокус на строку row1

Используем код:
Код

int dataSourceRowIndex = dataTable.Rows.IndexOf(row1);
int rowHandle = gridView.GetRowHandle(dataSourceRowIndex);
gridView.FocusedRowHandle = rowHandle;

Код

Dim dataSourceRowIndex As Integer = dataTable.Rows.IndexOf(row1)
Dim rowHandle As Integer = gridView.GetRowHandle(dataTable.Rows.IndexOf(dataRows(0)))
gridView.FocusedRowHandle = rowHandle


Метод dataTable.Rows.IndexOf(row1) возвращает 1, что правильно.
Метод gridView.GetRowHandle(dataSourceRowIndex) возвращает тоже 1.
И когда мы пытаемся сфокусироваться на строке получаем фокус на строке row2.

Я так и не понял бага это или что...
В итоге DevExpress предлагает просто искать строку:
http://www.devexpress.com/Support/Center/p/Q182679.aspx

P.S. версия 9.3

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)