views:

1024

answers:

1

Im working on a large database application using WPF. So far, I was able to create a DataContext using Link to Sql class, store it in an ObservableCollection, and fed it to my DataGrid as DataContext.

The main table in SQL I'm trying to read/write looks like this

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

I want to represent these columns in my DataGrid by using DataTemplates and Inline editing WorkID | CustomerName | UserName | DateCreated

Do I have to use Proxy Class that contains all these columns and ids, should I modify my observablecollection, Or should I handle everything in the code behind based on events. I like the fact that the datagrid does basic CRUD which is in fact great since I'm on a time constraint at the moment.

I am fairly new to WPF and particularly to the DataGrid control. I also have read about IValueConverters but I'm not exactly sure if this is the way to go and what performance issue I might encounter.

If anyone can point me in the right direction, so far, all the searches i found are simple tables without the use of foreign keys, etc. Thanks in advanced

UPDATE ---- I found this code so far and had some progress but now the issue is sorting.

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

this took care of being able to display the "Customer Name" instead of just the Customer_ID. Of course, I want to keep the underlying data as an integer but display a User Readable description. Now the problem is sorting. I'm just wondering if there's a way to do this very cleanly. I assume this is a common scenario but I haven't been successful finding a solution. I guess maybe I'm looking for the wrong search terms.

To simplify things, here's what I have so far: 1.) I have a table called Work_Table that contains Work_ID, Customer_ID, Employee_ID etc.. 2.) I have another lookup table called Customers_Table that contains Customer_ID, CustomerName, etc.. 3.) I have to display these columns in a DataGrid - Work_ID, CustomerName, etc...

I have an ObservableCollection that my DataGrid is bound to. Before I tried the combobox approach, it displayed Work_ID, Customer_ID, Employee_ID, etc.. basically the whole table and its columns.

The question is what is the best way for me to do item 3.)? Should I bind my DataGrid to a custom ObservableCollection that only contains columns I needed? Is IValueConverter another feasable solution so when the DataGrid is about to display the Customer_ID it will display CustomerName instead? I did not have this problem before until I normalized the database. Thanks again in advanced!

+1  A: 

I think this is probably what you are looking for.

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

mrwayne
Hi Mr Wayne,Thanks for the reply, It is indeed a very helpful blog. I think I now understand what I am trying to look for. I will repost my question. Thanks again!
jxd215