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&lt;Customer&gt;。在后面的代码中将此列表作为属性公开,并使用 xaml 中数据网格内的代码DataGrid.ItemsSource=Binding ListOfCustomers 绑定到它。最好在 WPF 应用程序中使用一个名为 MVVM 的框架。如果你使用这个框架,你的代码会很棒。 msdn.microsoft.com/en-us/magazine/dd419663.aspx 谢谢!我创建了属性customersList (private List&lt;Customer&gt;)。我在Window_Loaded 方法中重视它。我验证了customersList 包含正确的值。然后,我将属性 ItemsSource="Binding customersList" 添加到 XAML 中的 DataGrid 标记中。我忘记了什么? Window_Loaded 事件在绑定解决后发生。这意味着您必须 a) 在加载之前为 customersList 提供值(在构造函数中执行以确保)或 b) 实现 INotifyPropertyChanged 接口,该接口将告诉 xaml 每次都从属性中获取新值属性发生变化。选项 a) 将花费最少的时间,但如果您想让列表发生很大变化,选项 b 是最好的。看起来工作量很大,但相信我,从长远来看,它可以为您节省大量时间,尤其是在您的程序甚至是半复杂的情况下。 @Dev 你把你的问题解决了吗?如果你愿意,我可以为你编写一些代码

以上是关于DataGrid 数据绑定与 ADO.net 实体数据模型的主要内容,如果未能解决你的问题,请参考以下文章

datagrid数据绑定的概念

ASP.NET MVC 项目中 ADO.NET 实体模型的已打开 DataReader

c#如何将html标签写入指定的excel中

带有 OLE DB SQLServer2000 数据源的 ADO.NET 实体框架

具有 LINQ 关联的 C# 和 ADO .NET 实体数据模型以及同一表的实体

ADO.NET 实体框架与 NHibernate [关闭]