0

我正在使用 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 的信息,但我不确定这是否是可行的方法以及我可能会遇到什么性能问题。

如果有人能指出我正确的方向,到目前为止,我发现的所有搜索都是简单的表,没有使用外键等。


更新
到目前为止,我发现了这段代码并取得了一些进展,但现在问题是排序。

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

在我规范化数据库之前,我之前没有这个问题。

4

1 回答 1

1

我想这可能是你正在寻找的。

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

于 2009-11-10T01:55:53.230 回答