Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сортировка и фильтр Lookup поля

263
22 декабря 2006 года
koltaviy
816 / / 16.12.2004
В общем все наверно ясно из названия темы..
Главная таблица в одном из полей хранит ключ из таблицы-справочника..
Как отсортировать или отфильтровать главную таблицу по значениям таблицы-справочника??
Знаю один способ:
При работе с главной таблицей добавляешь в нее еще одно поле(по средствам запроса) - само наименование из таблицы-справочника.. И работаешь с получившейся таблицей-запросом..
Но это же тупость..
Такая бодяга нужна для работы с DataGridView.. У него есть Sort, у Sort есть IComparer.. Но насколько я понял с помощью него нельзя реализовать задуманное), а можно лишь сделать сложную сортировку по нескольким полям, либо сортировку не в традиционном порядке..
К тому же, мы сможем только отсортировать значения, а как их фильтровать??!!!!
--------------------------------------------------------------
Корректировочка:
IComparer работает только с Unbound columns(..
Так что он при любом раскладе не подойдет!!
Но по-моему я уже близок к разгадке)).. но все-таки жду ответа!!
273
27 декабря 2006 года
3A3-968M
1.2K / / 22.12.2005
Используй DataView а не DataTable при датабиндинге к GridView. Объект DataView создаётся путём передачи в его конструктор параметра типа DataTable, и нужен это класс для различного вида сортировок. Есть даже свойство DataView.RowFilter в котором можно задать сколь угодно сложное выражение, и потом этот DataView уже указать в виде источника данных. Но прежде таблицы должны иметь Relations. С настройками отношений между DataTable думаю не будет у тебя вопросов. Да и вообще на твоём месте я бы сделал типизированные наборы данных с таблицами, в это случае вещи, которые хочешь реализовать можно вообще сделать в design-mode.
263
27 декабря 2006 года
koltaviy
816 / / 16.12.2004
Цитата: 3A3-968M
..Да и вообще на твоём месте я бы сделал типизированные наборы данных с таблицами, в это случае вещи, которые хочешь реализовать можно вообще сделать в design-mode.


Они и так у меня типизированные..
А за всю информацию - thanks..
Буду разбираться с DataView)

263
07 января 2007 года
koltaviy
816 / / 16.12.2004
Цитата: 3A3-968M
Используй DataView а не DataTable при датабиндинге к GridView. Объект DataView создаётся путём передачи в его конструктор параметра типа DataTable, и нужен это класс для различного вида сортировок. Есть даже свойство DataView.RowFilter в котором можно задать сколь угодно сложное выражение, и потом этот DataView уже указать в виде источника данных. Но прежде таблицы должны иметь Relations. С настройками отношений между DataTable думаю не будет у тебя вопросов. Да и вообще на твоём месте я бы сделал типизированные наборы данных с таблицами, в это случае вещи, которые хочешь реализовать можно вообще сделать в design-mode.


Только сейчас добрался до DataView..
Вот сделал как в MSDN написано..
Все сортируется по алфавиту.. только не в DataGridView..
Как мне все это в DataGridView сортировать, если у меня bound columns?!!
Вот чо сделал:

273
08 января 2007 года
3A3-968M
1.2K / / 22.12.2005
Ну заставил голову поломать:) Вот решение:
Код:
[SIZE=2][COLOR=#0000ff][FONT=Courier New]private [/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]void [/COLOR][/SIZE][SIZE=2]dataGridView1_ColumnHeaderMouseClick([/SIZE][SIZE=2][COLOR=#0000ff]object[/COLOR][/SIZE][SIZE=2] sender, [/SIZE][SIZE=2][COLOR=#008080]DataGridViewCellMouseEventArgs[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] e)[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]{[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#0000ff] if[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] (e.ColumnIndex == 0)[/FONT][/SIZE]
[SIZE=2][FONT=Courier New] {[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080]   DataView[/COLOR][/SIZE][SIZE=2] catView = [/SIZE][SIZE=2][COLOR=#0000ff]this[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].dvCategory;[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080]   DataRelation[/COLOR][/SIZE][SIZE=2] catProRel = expDataSet.Relations[[/SIZE][SIZE=2][COLOR=#800000]"КатегорииПродукты"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]];[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]   catView.Sort = [/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#800000]"Категория"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New];[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080]   DataTable[/COLOR][/SIZE][SIZE=2] result = [/SIZE][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#008080]ExpDataSet[/COLOR][/SIZE][SIZE=2].[/SIZE][SIZE=2][COLOR=#008080]ПродуктыDataTable[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]();[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#0000ff]   foreach[/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#008080]DataRowView[/COLOR][/SIZE][SIZE=2] catDRV [/SIZE][SIZE=2][COLOR=#0000ff]in[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] catView)[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]   {[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080]     DataView[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] proView = catDRV.CreateChildView(catProRel);[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]     proView.Sort = [/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#800000]"Продукт"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New];[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#0000ff]     foreach[/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#008080]DataRowView[/COLOR][/SIZE][SIZE=2] proDRV [/SIZE][SIZE=2][COLOR=#0000ff]in[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] proView)[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]     {[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]         result.Rows.Add([/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]Int32[/COLOR][/SIZE][SIZE=2].Parse(proDRV[[/SIZE][SIZE=2][COLOR=#800000]"Код"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]].ToString()),[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080]           Int32[/COLOR][/SIZE][SIZE=2].Parse(proDRV[[/SIZE][SIZE=2][COLOR=#800000]"Категории_Код"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]].ToString()), [/FONT][/SIZE]
[SIZE=2][FONT=Courier New]           proDRV[[/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#800000]"Продукт"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]]);[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]     }[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]   }[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]   dataGridView1.DataSource = result;[/FONT][/SIZE]
[SIZE=2][FONT=Courier New] }[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]}[/FONT][/SIZE]
263
08 января 2007 года
koltaviy
816 / / 16.12.2004
Спасибо, все очень красиво по-моему получилось)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог