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

Поиск:

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


Опытный
**


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

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



Собственно идея такая:
- Запоминаем в переменной значение идентификатора - например поля ClientID (CurrencyManager)
- после сортировки запускаем цикл который проверяет в какой строке не датасета, а его представления в гриде (ведь записи кроме того что отсортированы могут быть еще и отфильтрованы) теперь находится это значение.
- выделяем эту запись.

Вот это и делает (должен) этот цикл.
На всякий случай Me.dataGrid1.Item(I, 0) - возвращает значение из строки I и первой колонки. Если идентификатор (ClientID) не в первой колонке - подставь другую цифру.
PM MAIL ICQ   Вверх
mr.DUDA
Дата 20.10.2005, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Господа, давайте юзать нормальные гриды (например DevExpress.XtraGrid), и не будет таких проблем smile


--------------------
user posted image
PM MAIL WWW   Вверх
asper
Дата 21.10.2005, 05:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Papirus - а если идентификатор есть только в DataSet, а в DataGrid он не отображается за ненадобностью?
Может быть, можно в DataGrid организовать невидимый стобец?
mr.Duda - стандартные гриды по определению должны работать быстрее.
PM MAIL   Вверх
Papirus
Дата 21.10.2005, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хорошая мысль, имхо, скрыть столбец с идентификатором. Если используешь стиль грида, то добавь этот столбец с идентификатором и поставь его ширину = 0

Вот это точно работает
Код

Dim I As Integer
For I = 0 To Me.dataset11.Table1.DefaultView.Count - 1
      If Me.dataGrid1.Item(I, 0) = MyParam Then 
               Me.BindingContext(Me.DataGrid1.DataSource, Me.DataGrid1.DataMember).Position = I
               Me.dataGrid1.Select(0)
               Exit For
      End If
Next

Добавлено @ 09:41
Цитата(mr @ 20.10.2005, 22:17)
Господа, давайте юзать нормальные гриды (например DevExpress.XtraGrid), и не будет таких проблем 

Возможно. Но я лично не шибко люблю использовать в проге "левые" компоненты, если можно использовать стандартные. Другое дело, если сандартные слишком запарно причесывать под потребность юзеров.
Но это мое частное, личное и персональное ИМХО. smile
PM MAIL ICQ   Вверх
asper
Дата 24.10.2005, 04:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Papirus - спасибо за помощь. Спасибо за совет с нулевой шириной столбца - очень пригодилось.
И все-таки этот способ позволяет встать на ту строку 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

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


Опытный
**


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

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



Если надежно работает, то чего еще нужно... smile
PM MAIL ICQ   Вверх
asper
Дата 25.10.2005, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



smile
Просто не сразу удалось выйти на это решение.
И не совсем понятно, почему Ваш вариант не идет у меня...
Впрочем, ладно, проблема решена. У кого возникнет подобная же, тот сможет воспользоваться любым из вариантов (какой больше пойдет) smile
PM MAIL   Вверх
Papirus
Дата 25.10.2005, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



[quote=asper, 25.10.2005, 02:02]И не совсем понятно, почему Ваш вариант не идет у меня... [/quot]

Все просто - он у меня срабатывает в процедуре Click ДО сортировки smile , а надо после. так что мой вариант не работает как надо. Т.е. отлавливать событие ListChanged все таки надо.

Ну не досмотрел... smile
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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