我正在使用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吗?
我之前没有遇到此问题,直到我规范化数据库。
答案 0 :(得分:1)