Entity Framework 在Dexpress中的应用

本演练是DevExpress YouTube频道上提供的Entity Framework Data视频的抄本。

在本教程中,您将学习如何将网格控件绑定到Entity Framework数据源,如何使用数据注释属性来更改网格显示和管理数据的方式,以及如何将单元格值的更改发布回网格。数据源。

起点

从一个具有Windows窗体和一个空GridControl的项目开始。该解决方案还默认包含一个名为Model1的实体框架模型。您可以双击它以在图表上查看其视觉表示。对于本教程,请使用AdventureWorks数据库的修改版本。它仅包含一个表,表中只有几个字段。

DataGridBindingEF_AdventureWorksTable

有关创建和修改Entity Framework模型的信息,请参考Microsoft的Entity Framework文档

绑定到实体框架数据源

将实体框架模型绑定到网格控件的最简单方法是使用“ 数据源配置向导”。调用网格控件的智能标记,然后单击“ 数据源向导”

DataGridBindingEF_InvokingDataSourceWizard

选择实体框架技术,然后选择现有的数据连接或创建一个新的数据连接。在本教程中,使用到示例Microsoft AdventureWorksDW2008R2数据库的现有连接。单击下一步继续。

DataGridBindingEF_WizardFirstPage

在下一页上,将要求您选择所需的装订模式。选择“ 使用绑定源组件绑定”选项,然后单击“ 下一步”

DataGridBindingEF_WizardSecondPage

最后,选择要在网格控件中显示的表。

DataGridBindingEF_WizardFinalPage

绑定到实体框架数据的结果

现在,网格控件已绑定到EF数据,并且所有必需的代码已经生成。您可以在.CS文件中看到自动生成的代码。现在运行该应用程序以查看结果。

DataGridBindingEF_BindingResult

以下是有关网格如何显示其绑定数据的一些观察结果。

  • 简单的数字格式应用于“ 价格”字段,但使用“货币”格式更有意义。
  • “ 描述”字段包含冗长的值,因此很难在网格单元格中对其进行编辑。
  • 网格足够智能,可以为绑定到日期时间字段的列分配特殊的编辑器。
  • 列名只是从字段名派生的。
  • 显然,没有将数据验证规则应用于网格。

应用数据注释属性

可以使用GridControl设置更改所有默认行为。实现此目的的另一种方法是更改​​数据字段属性或数据注释属性。当您有多个控件绑定到同一数据源时,这可能会派上用场。这样,您不必设置相同的规则。看看这是如何工作的。

打开包含表数据模型的DimProducts.cs文件。在这里,您可以看到所有可用的数据字段,它们声明为DimProduct类的属性。

 
<span style="color:#505050"><code>
<span style="color:#0000ff">public</span> <span style="color:#0000ff">partial</span> <span style="color:#0000ff">class</span> <span style="color:#2b91af">DimProduct</span>
{
    <span style="color:#0000ff">public</span> <span style="color:#0000ff">int</span> ProductKey { <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>; }
    <span style="color:#0000ff">public</span> <span style="color:#0000ff">string</span> EnglishProductName { <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>; }
    <span style="color:#0000ff">public</span> Nullable<<span style="color:#0000ff">decimal</span>> DealerPrice { <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>; }
    <span style="color:#0000ff">public</span> <span style="color:#0000ff">string</span> EnglishDescription { <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>; }
    <span style="color:#0000ff">public</span> Nullable<System.DateTime> StartDate { <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>; }
    <span style="color:#0000ff">public</span> Nullable<System.DateTime> EndDate { <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>; }
}
</code></span>

将数据属性添加到这些属性,并查看其如何更改网格行为。

注意

请注意,您的应用程序应引用System.ComponentModel.DataAnnotations库来这样做。

  • 对于EnglishProductName字段,添加Required属性。这将不允许最终用户为该列的单元格设置空值。

     
    
    [Required]
    public string EnglishProductName { get; set; }
    

    运行该应用程序以确保不再允许使用空值。

    DataGridBindingEF_RequiredEnglishProductName

  • 对于DealerPrice字段,添加DataType属性以指示应将这些整数值视为货币数据。此外,应用范围属性设置最小和最大允许值。

     
    
    [DataType(DataType.Currency), Range(200, 5000)]
    public Nullable<decimal> DealerPrice { get; set; }
    

    DataGridBindingEF_AAforPriceResult

  • 对于EnglishDescription字段,使用DataType属性将数据类型从简单文本更改为多行文本。在显示属性将指定名称说明的列。

     
    
    [DataType(DataType.MultilineText), Display(Name = "Description", Description = "Detailed product description")]
    public string EnglishDescription { get; set; }
    

    运行该应用程序以查看用于列标题的更新标题及其工具提示。另外,请注意,由于您将数据类型指定为多行文本,因此单元格现在使用MemoEdit

    DataGridBindingEF_AAforDescriptionResult

  • 最后,对于StartDateEndDate列,应用不同的格式和编辑规则。第一个日期将被视为简单文本值。第二列的数据将保留为日期时间对象,但格式将更改为显示完整的月份,名称和年份。

     
    
    [DataType(DataType.Text)]
    public Nullable<System.DateTime> StartDate { get; set; }
    [DisplayFormat(DataFormatString = "MMMM/yyyy")]
    public Nullable<System.DateTime> EndDate { get; set; }
    

    启动该应用程序,然后在StartDate列中看不到任何特殊的编辑器。在结束日期列保持的编辑,但格式已经改变。

    DataGridBindingEF_AAforDateTimeColumnsResult

要了解有关所有现有数据属性的更多信息,请参见此MSDN文章

将数据发布回数据源

为了确保将网格控件中的单元格值更改重新发布回数据源,您需要添加几行代码。当网格引发ColumnView.RowUpdated事件时,保存更改。您需要访问数据源上下文,因此必须更改变量的范围,以便它对Form类中的所有方法均可用。在处理程序中,您需要做的就是调用SaveChanges方法。

 
<span style="color:#505050"><code>
DXApplication.AdventureWorksDW2008R2Entities dbContext;

<span style="color:#0000ff">private</span> <span style="color:#0000ff">void</span> <span style="color:#2b91af">gridView1_RowUpdated</span>(<span style="color:#0000ff">object</span> sender, DevExpress.XtraGrid.Views.Base.RowObjectEventArgs e) {
    dbContext.SaveChanges();
}
</code></span>

现在运行该应用程序并更改“ 经销商价格”列中的值。将焦点移到另一行,以确保引发ColumnView.RowUpdated事件。然后,关闭该应用程序并再次运行。您将看到该值已保存。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值