Пишу в универ для зачета интерфейс к базе данных под Mysql. Есть две таблицы:
• Дрессировщики: id_дрессировщика, имя, ..
• Животные: кличка, id_дрессировщика (только один!), ..
Животных отображаю в ListView с измененным ItemTemplate, присваивая DataContext'у результат запроса (без linq):
SELECT * FROM Животные
Аналогично нужно отобразить дрессировщиков, только в ItemTemplate нужно включить
Список подопечных животных.. запрос примерно такой:
SELECT имя, кличка FROM Дрессировщики LEFT JOIN Животные USING (id_дрессировщика)
Так вот — подскажите как это сделать?) думал — может на какоето события обновления элементов для каждого выполнять другой запрос (список подопечных).. также искал — нашел в сторону Группировки в ListView, но мне кажется это не совсем то.. хотя может я и не прав.
Заранее спасибо
PS: Визуально пока не сделал отображение — можно посмотреть на примере "Животные — Награды":
Здравствуйте, free.rFczZZ, Вы писали:
FR>Пишу в универ для зачета интерфейс к базе данных под Mysql. Есть две таблицы:
Visual Studio LightSwitch преподавателю сдайте. Как раз антырфейсы к базам генерит.
FR>• Дрессировщики: id_дрессировщика, имя, ..
FR>• Животные: кличка, id_дрессировщика (только один!), ..
FR>Животных отображаю в ListView с измененным ItemTemplate, присваивая DataContext'у результат запроса (без linq):
FR>FR>SELECT * FROM Животные
FR>
Аналогично нужно отобразить дрессировщиков, только в ItemTemplate нужно включить Список подопечных животных.. запрос примерно такой:
FR>FR>SELECT имя, кличка FROM Дрессировщики LEFT JOIN Животные USING (id_дрессировщика)
FR>
Так вот — подскажите как это сделать?) думал — может на какоето события обновления элементов для каждого выполнять другой запрос (список подопечных).. также искал — нашел в сторону Группировки в ListView, но мне кажется это не совсем то.. хотя может я и не прав.
Ага, трудно приклеить к графу неупорядоченное множество. Пора вводить объектную модель. Таки-отказаться от отображения сырых данных и написать классы Животное и Дрессировщик. У последнего сделать свойство Подопечные, при первом обращении к которому подгружать список дрессируемых животных. На малых объёмах данных это даже тормозить не будет и зачёт будет успешно сдан.
И шаблон с высоты птичьего полёта будет выглядеть так:
<ListView.ItemTemplate>
<DataTemplate DataType="{x:Type Дрессировщик}">
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Имя}"/>
<ListBox ItemSource="{Binding Подопечные}" DisplayMemberPath="Кличка"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
Сдал зачет
. Vladek, спасибо за совет! Так наверное нужно делать, но до последнего хотелось клиент оставить максимально простым.. В итоге унаследовал контрол от ListView, который имеет свойство "Атрибут sql запроса" и по его изменению компонент сам себе DataContext заполняет.. Разметка подзапроса с фотками животных теперь выглядит так:
<ctrl:SubQueryListView
Query = "SELECT * FROM animals WHERE (id_trainer = {0})"
QueryAttribute="{Binding id_trainer}">
<ctrl:SubQueryListView.ItemTemplate>
<DataTemplate>
<Border ... >
<Image Source="{Binding avatar}" ToolTip="{Binding name}"/>
</Border>
</DataTemplate>
</ctrl:SubQueryListView.ItemTemplate>
<ctrl:SubQueryListView.ItemsPanel>
<ItemsPanelTemplate><StackPanel /></ItemsPanelTemplate>
</ctrl:SubQueryListView.ItemsPanel>
</ctrl:SubQueryListView>