wpf datagrid observablecollection

时间:2009-11-10 01:45:18

标签: wpf datagrid observablecollection ivalueconverter

我正在使用WPF处理大型数据库应用程序。到目前为止,我已经能够使用Link to Sql类创建DataContext,将其存储在ObservableCollection中,并将其作为DataContext提供给我的DataGrid。

我正在尝试读/写的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...

我想通过使用DataTemplates和内联编辑

在我的DataGrid中表示这些列
WorkID | CustomerName | UserName | DateCreated

我是否必须使用包含所有这些列和ID的代理类?我应该修改我的observablecollection,还是应该根据事件处理后面代码中的所有内容?我喜欢这样一个事实,即数据网格做了基本的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等...

我有一个我的DataGrid绑定的ObservableCollection。在我尝试使用组合框方法之前,它显示了Work_ID,Customer_ID,Employee_ID等。基本上是整个表及其列。

问题是我做项目3的最佳方式是什么?)?我应该将我的DataGrid绑定到一个只包含我需要的列的自定义ObservableCollection吗? IValueConverter是另一个可行的解决方案,所以当DataGrid即将显示Customer_ID时,它将显示CustomerName吗?

我之前没有遇到此问题,直到我规范化数据库。

1 个答案:

答案 0 :(得分:1)