Наблюдаемая коллекция wpf datagrid

Я работаю над большим приложением базы данных с использованием 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 и встроенного редактирования.

WorkID | CustomerName | UserName | DateCreated

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

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

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


ОБНОВЛЕНИЕ - Я нашел этот код до сих пор и имел некоторый прогресс, но теперь проблема сортируется.

<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?

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


person jxd215    schedule 10.11.2009    source источник


Ответы (1)


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

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

person mrwayne    schedule 10.11.2009
comment
Привет, мистер Уэйн, Спасибо за ответ, это действительно очень полезный блог. Думаю, теперь я понимаю, что ищу. Я перепостю свой вопрос. Еще раз спасибо! - person jxd215; 10.11.2009