【问题标题】:2-Way databinding with Entity Framework and WPF DataGrid , is Possible? [closed]使用 Entity Framework 和 WPF DataGrid 进行 2-Way 数据绑定,可能吗? [关闭]
【发布时间】:2011-01-01 10:38:27
【问题描述】:

我正在使用 SQL CE、WPF、Entity framework 3.5sp2 开发 POS 应用程序,并且我正在尝试使用数据网格作为我的 Order Entry Control 以供用户输入 Products Order 。 我计划将此绑定到 enitiy frmae 工作模型,寻找 2 方式更新?

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        using (MasterEntities nwEntities = new MasterEntities())
        {
          var users = from d in nwEntities.Companies
        select new CompanyRowModel{ CompanyId = d.CompanyId, CompanyName       d.CompanyName, Place = d.Place }

              listBox1.DataContext = users;
              dataGrid1.DataContext = users;
        }           
      }

      public class CompanyRowModel
      {
        public int CompanyId { get; set; }
        public string CompanyName { get; set; }
        public string Place{ get; set; }
      }

我的 xaml 编码是这样的

   <Grid>
     <ListBox Name="listBox1" ItemsSource="{Binding}"  />
    <Button Content="Show "  Name="button1" Click="button1_Click"  />

    <DataGrid AutoGenerateColumns="False" Name="dataGrid1" ItemsSource="{Binding}" >
      <DataGrid.Columns>
          <DataGridTextColumn Header=" ID"     Binding="{Binding CompanyId}"/>
          <DataGridTextColumn Header="Company Name"  Binding="{Binding CompanyName}"/>
          <DataGridTextColumn Header="Place"    Binding="{Binding Place}" />
        </DataGrid.Columns>
    </DataGrid>
    <Button Content="Save"  Name="button2" VerticalAlignment="Bottom" Click="button2_Click" />
</Grid>

已编辑:

我进行了@vorrtex 显示的更改,但是,然后我添加了另一个按钮来保存更改,并在按钮单击事件中添加了以下代码,但显示更新错误

  private void button2_Click(object sender, RoutedEventArgs e)
    {
         nwEntities.SaveChanges();
    }

【问题讨论】:

  • 还有另一种方法:只写“var users = nwEntities.Companies.ToList()”。但是如果一个表的字段很大,这个解决方案会导致性能问题。

标签: c# wpf entity-framework entity frame


【解决方案1】:

这段代码有问题:

select new { d.CompanyId, d.CompanyName, d.Place }

这个匿名类的属性是只读的,所以你应该用这些属性创建一个真实的类。

public class CompanyRowModel
{
    public int CompanyId { get; set; }
    //...
}
//...
var users = from d in nwEntities.Companies
            select new CompanyRowModel{ CompanyId = d.CompanyId, CompanyName = d.CompanyName, Place = d.Place }

【讨论】:

  • 我更改了我的编码,如您所示,保存实体时出现新错误,您能帮帮我吗?
  • 您在 CLR 对象而非实体中进行了更改。将对象集合与实体集合同步。例如,使用事件 RowEditEnding 并将 CompanyRowModel 对象的值复制到 nwEntities.Companies 中的相关实体。它们按 ID 相关,因此请确保此列在 DataGrid 中是只读的。
【解决方案2】:

是的,有可能。


好的,修改后

您现在将选定的属性值存储在一个新的临时类 CompanyDataRowModel 中。

这不是一个跟踪类。要么编写您自己的自我跟踪实体类,要么使用 Company 类。

【讨论】:

  • 但我/我在这样做时遇到错误请帮助..请参阅修改后的问题
  • 我用具体的例子更新了我的 wuetion,你能帮帮我吗?
【解决方案3】:

您可能对 WPF Application Framework (WAF)BookLibrary 示例应用程序感兴趣。它还使用实体框架和 SQL CE 作为 DB,它包含 WPF DataGrid。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多