wpf datagrid наблюдаемая коллекция - PullRequest
0 голосов
/ 10 ноября 2009

Я работаю над большим приложением базы данных, используя WPF. До сих пор я смог создать DataContext с использованием класса Link to Sql, сохранить его в ObservableCollection и передать его в свой DataGrid как DataContext.

Основная таблица в SQL, которую я пытаюсь читать / писать, выглядит следующим образом

Work_Table
  WorkID[pk int] | frn_CustomerID[fk int] | frn_UserID[fk int] | DateCreated[datetime] | etc...

Customers_Table
  CustomerID[pk int] | CustomerName[varchar] | etc...

Users_Table
  UserID[pk int] | UserName[varchar] | etc...

Я хочу представить эти столбцы в моей DataGrid с помощью DataTemplates и Inline edit

WorkID | CustomerName | UserName | DateCreated

Нужно ли использовать прокси-класс, который содержит все эти столбцы и идентификаторы? Должен ли я изменить свою наблюдаемую коллекцию, или я должен обрабатывать все в коде на основе событий? Мне нравится тот факт, что сетка данных выполняет базовую CRUD, что на самом деле замечательно, так как на данный момент у меня нехватка времени.

Я довольно новичок в WPF и особенно в элементе управления DataGrid. Я также читал о IValueConverters, но я не совсем уверен, стоит ли идти этим путем и с какой проблемой производительности я могу столкнуться.

Если кто-то покажет мне правильное направление, все поиски, которые я обнаружил, являются простыми таблицами без использования внешних ключей и т. Д.


UPDATE
Я нашел этот код до сих пор и имел некоторый прогресс, но теперь проблема в сортировке.

<toolkit:DataGridTemplateColumn Header="Customer Name">
     <toolkit:DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
             <ComboBox ItemsSource="{Binding Customers, Source={StaticResource MyDataContext}}" DisplayMemberPath="CustomerName" SelectedValuePath="Customer_ID" SelectedValue="{Binding Path=Customer_ID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  />
         </DataTemplate>
     </toolkit:DataGridTemplateColumn.CellTemplate>
 </toolkit:DataGridTemplateColumn>`

Это обеспечивало возможность отображать «Имя клиента» вместо просто «Customer_ID». Конечно, я хочу сохранить базовые данные в виде целого числа, но отобразить описание, читаемое пользователем. Теперь проблема в сортировке. Мне просто интересно, есть ли способ сделать это очень чисто. Я предполагаю, что это распространенный сценарий, но мне не удалось найти решение. Наверное, я ищу неправильные условия поиска.

Чтобы упростить вещи, вот что у меня есть:

1.) У меня есть таблица с именем Work_Table, содержащая Work_ID, Customer_ID, Employee_ID и т. Д.
2.) У меня есть другая таблица поиска, которая называется Customers_Table, которая содержит Customer_ID, CustomerName и т. Д.
3.) Я должен отобразить эти столбцы в DataGrid - Work_ID, CustomerName и т.д ...

У меня есть ObservableCollection, с которой связана моя DataGrid. До того, как я попробовал комбинированный подход, он отображал Work_ID, Customer_ID, Employee_ID и т. Д., В основном, всю таблицу и ее столбцы.

Вопрос в том, как лучше всего выполнить пункт 3)? Должен ли я связать свою DataGrid с пользовательской коллекцией ObservableCollection, которая содержит только нужные мне столбцы? Является ли IValueConverter еще одним возможным решением, поэтому, когда DataGrid собирается отобразить Customer_ID, вместо него будет отображаться CustomerName?

У меня не было этой проблемы раньше, пока я не нормализовал базу данных.

1 Ответ

1 голос
/ 10 ноября 2009

Я думаю, что это, вероятно, то, что вы ищете.

http://blogs.msdn.com/vinsibal/archive/2008/08/19/wpf-datagrid-stock-and-template-columns.aspx

...