WPF: SQL группировка элементов в ListView
От: free.rFczZZ  
Дата: 22.12.10 12:58
Оценка:
Пишу в универ для зачета интерфейс к базе данных под Mysql. Есть две таблицы:
• Дрессировщики: id_дрессировщика, имя, ..
• Животные: кличка, id_дрессировщика (только один!), ..


Животных отображаю в ListView с измененным ItemTemplate, присваивая DataContext'у результат запроса (без linq):
SELECT * FROM Животные
Аналогично нужно отобразить дрессировщиков, только в ItemTemplate нужно включить Список подопечных животных.. запрос примерно такой:
SELECT имя, кличка FROM Дрессировщики LEFT JOIN Животные USING (id_дрессировщика)
Так вот — подскажите как это сделать?) думал — может на какоето события обновления элементов для каждого выполнять другой запрос (список подопечных).. также искал — нашел в сторону Группировки в ListView, но мне кажется это не совсем то.. хотя может я и не прав.

Заранее спасибо

PS: Визуально пока не сделал отображение — можно посмотреть на примере "Животные — Награды":
Re: WPF: SQL группировка элементов в ListView
От: Vladek Россия Github
Дата: 23.12.10 01:45
Оценка:
Здравствуйте, 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>
Re[2]: WPF: SQL группировка элементов в ListView
От: free.rFczZZ  
Дата: 25.12.10 09:56
Оценка:
Сдал зачет . 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>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.