[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]
Сортировка и фильтр Lookup поля
Главная таблица в одном из полей хранит ключ из таблицы-справочника..
Как отсортировать или отфильтровать главную таблицу по значениям таблицы-справочника??
Знаю один способ:
При работе с главной таблицей добавляешь в нее еще одно поле(по средствам запроса) - само наименование из таблицы-справочника.. И работаешь с получившейся таблицей-запросом..
Но это же тупость..
Такая бодяга нужна для работы с DataGridView.. У него есть Sort, у Sort есть IComparer.. Но насколько я понял с помощью него нельзя реализовать задуманное), а можно лишь сделать сложную сортировку по нескольким полям, либо сортировку не в традиционном порядке..
К тому же, мы сможем только отсортировать значения, а как их фильтровать??!!!!
--------------------------------------------------------------
Корректировочка:
IComparer работает только с Unbound columns(..
Так что он при любом раскладе не подойдет!!
Но по-моему я уже близок к разгадке)).. но все-таки жду ответа!!
Используй DataView а не DataTable при датабиндинге к GridView. Объект DataView создаётся путём передачи в его конструктор параметра типа DataTable, и нужен это класс для различного вида сортировок. Есть даже свойство DataView.RowFilter в котором можно задать сколь угодно сложное выражение, и потом этот DataView уже указать в виде источника данных. Но прежде таблицы должны иметь Relations. С настройками отношений между DataTable думаю не будет у тебя вопросов. Да и вообще на твоём месте я бы сделал типизированные наборы данных с таблицами, в это случае вещи, которые хочешь реализовать можно вообще сделать в design-mode.
Цитата: 3A3-968M
..Да и вообще на твоём месте я бы сделал типизированные наборы данных с таблицами, в это случае вещи, которые хочешь реализовать можно вообще сделать в design-mode.
Они и так у меня типизированные..
А за всю информацию - thanks..
Буду разбираться с DataView)
Цитата: 3A3-968M
Используй DataView а не DataTable при датабиндинге к GridView. Объект DataView создаётся путём передачи в его конструктор параметра типа DataTable, и нужен это класс для различного вида сортировок. Есть даже свойство DataView.RowFilter в котором можно задать сколь угодно сложное выражение, и потом этот DataView уже указать в виде источника данных. Но прежде таблицы должны иметь Relations. С настройками отношений между DataTable думаю не будет у тебя вопросов. Да и вообще на твоём месте я бы сделал типизированные наборы данных с таблицами, в это случае вещи, которые хочешь реализовать можно вообще сделать в design-mode.
Только сейчас добрался до DataView..
Вот сделал как в MSDN написано..
Все сортируется по алфавиту.. только не в DataGridView..
Как мне все это в DataGridView сортировать, если у меня bound columns?!!
Вот чо сделал:
Ну заставил голову поломать:) Вот решение:
Спасибо, все очень красиво по-моему получилось)