DataGrid 数据绑定与 ADO.net 实体数据模型
Posted
技术标签:
【中文标题】DataGrid 数据绑定与 ADO.net 实体数据模型【英文标题】:DataGrid data bindings with ADO.net Entity Data Model 【发布时间】:2012-04-10 10:20:20 【问题描述】:我有一个基于实体数据模型的应用程序,它使用 SQL Server CE 3.5 作为其数据存储。
在数据库中,我有一些客户,每个客户都有一些订单。这是一个简化的概述:
在我的 WPF 窗口中,我插入了一个DataGrid
,我想在其中列出所有客户,以及他们的姓名和地址。像这样的:
所以我写了这个 XAML:
<DataGrid Grid.Row="0" Name="customersDataGrid" AutoGenerateColumns="False" CanUserResizeColumns="True" AllowDrop="True" Drop="Window_Drop" DragEnter="Window_DragEnter">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Name" Width="Auto" IsReadOnly="True" />
<DataGridTemplateColumn Header="Address" Width="Auto" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
但是现在,如何将列 Name 与数据模型中客户的属性 Name
联系起来?
【问题讨论】:
【参考方案1】:当您使用 DataGridTemplateColumn 时,您可以将 DataTemplate 放在那里..(注意:您可能不需要“data:”前缀。)
<data:DataGridTemplateColumn Header="Name">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="Binding Name">
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
<data:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="Binding Name">
</DataTemplate>
</data:DataGridTemplateColumn.CellEditingTemplate>
</data:DataGridTemplateColumn>
【讨论】:
感谢您的回答!我试过了,但还是不行。没有错误,没有例外。我是否必须在某些方面告诉 XAML,要使用的上下文是什么?我该怎么做? @Dev 它不起作用的原因是因为您的 datagridview 实际上并未绑定到数据源。您需要查询数据库,并将结果放入List<Customer>
。在后面的代码中将此列表作为属性公开,并使用 xaml 中数据网格内的代码DataGrid.ItemsSource=Binding ListOfCustomers
绑定到它。最好在 WPF 应用程序中使用一个名为 MVVM 的框架。如果你使用这个框架,你的代码会很棒。 msdn.microsoft.com/en-us/magazine/dd419663.aspx
谢谢!我创建了属性customersList
(private List<Customer>
)。我在Window_Loaded
方法中重视它。我验证了customersList
包含正确的值。然后,我将属性 ItemsSource="Binding customersList"
添加到 XAML 中的 DataGrid
标记中。我忘记了什么?
Window_Loaded 事件在绑定解决后发生。这意味着您必须 a) 在加载之前为 customersList 提供值(在构造函数中执行以确保)或 b) 实现 INotifyPropertyChanged 接口,该接口将告诉 xaml 每次都从属性中获取新值属性发生变化。选项 a) 将花费最少的时间,但如果您想让列表发生很大变化,选项 b 是最好的。看起来工作量很大,但相信我,从长远来看,它可以为您节省大量时间,尤其是在您的程序甚至是半复杂的情况下。
@Dev 你把你的问题解决了吗?如果你愿意,我可以为你编写一些代码以上是关于DataGrid 数据绑定与 ADO.net 实体数据模型的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 项目中 ADO.NET 实体模型的已打开 DataReader
带有 OLE DB SQLServer2000 数据源的 ADO.NET 实体框架