Модераторы: gambit, Partizan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Последствия сортировки в datagrid 
:(
    Опции темы
asper
Дата 12.10.2005, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



Тема "Сортировка в datagrid - как отловить" - уже знакома.
Сопутствующий теме вопрос: как после сортировки (производится нажатием на заголовке столбца) вернуться в datagrid, причем желательно на ту же строку, на которой находился до сортировки и сделать эту строку выбранной. Вот код, где делается попытка встать хотя бы на первую запись, но это происходит только после того, как сделаешь по крайней мере скроллинг datagrid.
Код

 Private Sub DataGrid1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.Click
        Dim pnt As Point = DataGrid1.PointToClient(Cursor.Position)
        Dim hti As DataGrid.HitTestInfo = DataGrid1.HitTest(pnt)
        If hti.Type = DataGrid1.HitTestType.ColumnHeader Then
            BindingContext(DataGrid1.DataSource, DataGrid1.DataMember).Position = 0
        End If
    End Sub


PM MAIL   Вверх
Exception
Дата 12.10.2005, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 5
Всего: 186



при navigate запоминаешь тек.запись, а при сортировке направляешься на неё..
в чём трабла?
PM   Вверх
asper
Дата 13.10.2005, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



хм... не понимаю...
а можно в коде? smile
PM MAIL   Вверх
Papirus
Дата 13.10.2005, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: -1
Всего: 1



Цитата(asper @ 12.10.2005, 10:44)
Private Sub DataGrid1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.Click
        Dim pnt As Point = DataGrid1.PointToClient(Cursor.Position)
        Dim hti As DataGrid.HitTestInfo = DataGrid1.HitTest(pnt)
        If hti.Type = DataGrid1.HitTestType.ColumnHeader Then
            BindingContext(DataGrid1.DataSource, DataGrid1.DataMember).Position = 0
            Me.DataGrid1.Select(0)
        End If
    End Sub


PM MAIL ICQ   Вверх
Papirus
Дата 13.10.2005, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: -1
Всего: 1



или, если надо на текущей ползиции
Код

Me.DataGrid1.Select(BindingContext(DataGrid1.DataSource, DataGrid1.DataMember).Position)


Это навскидку. Вроде еще проще можно. Извини не искал.

PM MAIL ICQ   Вверх
asper
Дата 13.10.2005, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



Вариант первый - с возвращением на первую строку - срабатывает, НО только в том случае, если хотя бы пошевелишь скроллинг таблицы, без этого - все глухо, строка не выделяется.
Вариант второй также реагирует только на скроллинг, но при этом выбирается не та запись, которая была выделена до сортировки, а та ПОЗИЦИЯ, на которой стояла запись до сортировки.
Как быть?
PM MAIL   Вверх
Papirus
Дата 14.10.2005, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: -1
Всего: 1



1. Извини насчет скроллинга. Так и не понял какой скроллинг таблицы требуется шевелить. Специально выбирал последнюю запись в гриде, сортировал и в первом варианте получал выделенную первую строку на экране без дополнительных телодвижений.
2. Опять же извини. Не понял, что требуется не на ту же строку грида, а на ту же ЗАПИСЬ (смутило еще, что надо почему то возвращаться в грид). В этом случае, ИМХО, только запоминать в переменной какой-нть ID записи, а после сортировки искать ее в гриде и выделять.
PM MAIL ICQ   Вверх
asper
Дата 14.10.2005, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



1.У меня табличка достаточно широкая, поэтому она имеет полосу прокрутки по горизонтали.
Я делаю сортировку по любому столбцу и в результате datagrid как будто деактивируется, то есть фокус к нему не возвращается (пробую сделать программную фокусировку - не помогает). НО если я двигаю скроллинг, то datagrid активизируется и первая запись выделяется в нем как выбранная.
2. Понятно, подумаю, вот только вернуться бы в datagrid smile
PM MAIL   Вверх
Papirus
Дата 14.10.2005, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: -1
Всего: 1



Цитата(asper @ 14.10.2005, 09:07)
Понятно, подумаю, вот только вернуться бы в datagrid

Для поиска в гриде можно использовать вычисляемый цикл
Код

For I = 0 To Me.dataset11.Table1.DefaultView.Count - 1
      If Me.dataGrid1.Item(I, 0) = MyParam Then 
               Me.dataGrid1.Select(0)
               Exit For
      End If
Next

Тогда все само и получиться.
PM MAIL ICQ   Вверх
asper
Дата 17.10.2005, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



Если ставить этот код в обработку нажатия на header, то мне не понятно, что же сортируется - какую составляющую не посмотришь - все имеют старую сортировку...
Ничего не понимаю smile
PM MAIL   Вверх
asper
Дата 18.10.2005, 04:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



Для того, чтобы вернуться на ту же строку (по значениям, содержанию), на которой находился курсор в datagrid до сортировки, пришлось реализовать такой код:

Код

 Private Sub DataGrid1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid1.Click
        Dim pnt As Point = DataGrid1.PointToClient(Cursor.Position)
        Dim hti As DataGrid.HitTestInfo = DataGrid1.HitTest(pnt)
        If hti.Type = DataGrid1.HitTestType.ColumnHeader Then
            Dim MDataView As DataView = DS1.Tables("Table1").DefaultView
            AddHandler CType(MDataView, IBindingList).ListChanged, AddressOf DListChanged
        End If
    End Sub

    Sub DListChanged(ByVal sender As Object, ByVal e As ListChangedEventArgs)
        Dim MDataView As DataView = DS1.Tables("Table1").DefaultView
        Dim properties As PropertyDescriptorCollection = CType(MDataView, ITypedList).GetItemProperties(Nothing)
        Dim oDescriptor As PropertyDescriptor = properties("T1")
        Dim iPos As Integer = CType(MDataView, IBindingList).Find(oDescriptor, T1) 'Т1 - значение столбца, по которому идет определение позиции записи
        BindingContext(DataGrid1.DataSource, DataGrid1.DataMember).Position = iPos
        DataGrid1.Select(iPos)
    End Sub


При отладке дебаггером на строке DataGrid1.Select(iPos) выдается сообщение: "there is no source code available for the current location".
В datagrid, пока не пошевелишь прокрутку таблицы, курсор в нужную позицию не встает - он вообще отсутствует, т.е. теряется при сортировке. Не помогает НИЧЕГО smile

Помогите, плз, советом, что делать....
PM MAIL   Вверх
Papirus
Дата 18.10.2005, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: -1
Всего: 1



А что не работает в приведенном мной примере?
PM MAIL ICQ   Вверх
asper
Дата 19.10.2005, 04:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



Цитата
А что не работает в приведенном мной примере?

На нужную позицию вернуться не получается, DataGrid не активизируется (курсор никуда не ставится) smile
Кстати, для возвращения курсора пришлось имитировать нажатие esc...
PM MAIL   Вверх
Papirus
Дата 19.10.2005, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: -1
Всего: 1



Цитата(asper @ 19.10.2005, 04:13)
На нужную позицию вернуться не получается

А цикл-то отрабатывает? Запись находится?

PM MAIL ICQ   Вверх
asper
Дата 20.10.2005, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 10.8.2005

Репутация: нет
Всего: нет



Нет, запись найти не получается - я вообще не совсем понимаю, как работает этот цикл. А если была сортировка?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.