wpf datagrid observablecollection

Posted

技术标签:

【中文标题】wpf datagrid observablecollection【英文标题】: 【发布时间】:2009-11-10 01:45:18 【问题描述】:

我正在使用 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>`

这确保了能够显示“客户名称”而不仅仅是客户 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】:

我想这可能就是你要找的。​​p>

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

【讨论】:

您好韦恩先生,感谢您的回复,这确实是一个非常有帮助的博客。我想我现在明白我要寻找什么了。我将重新发布我的问题。再次感谢!

以上是关于wpf datagrid observablecollection的主要内容,如果未能解决你的问题,请参考以下文章

wpf datagrid 多行表头

wpf datagrid 怎么增加数据行

wpf datagrid cell 设置焦点

wpf 怎么给datagrid 右键菜单加多个选项?

wpf datagrid 默认选择为最新的一行,不知道为啥设置不了

wpf datagrid 单元格如何默认单击一次点中