【问题标题】:updating a data that is bound to a datagrid更新绑定到数据网格的数据
【发布时间】:2012-09-12 20:50:48
【问题描述】:

我有一个不知道如何解决的问题。我有一个 C# 应用程序,它从服务器接收数据项列表,它们被绑定并显示在数据网格中。然后,用户必须能够更改它们并添加或删除项目,然后将这些更改提交回服务器。数据网格基本上将用作 pgAdmin 3 或后续服务器或其他任何东西的“编辑数据”窗口,用户可以在其中编辑数据库表。

我能够在数据网格中显示项目,但不确定如何跟踪对列表所做的所有更改。进行更改时,必须知道项目的未更改版本以及更改的版本,因为需要删除原始版本并插入修改的版本。

有人知道怎么做吗?

【问题讨论】:

  • 你是如何从数据库中提取数据的?
  • @KDiTraglia 有一个中间服务器应用程序从 db 获取数据并将其转发到 c# 应用程序。 C# 应用程序通过套接字接收数据并将其解析为数据项列表。然后将该列表传递到包含数据网格的窗口。窗口有一个从这个列表构建的 ObservableCollection 字段,它被用作数据网格的项目源
  • 是中间服务器应用程序将数据写回数据库吗?如果是这样,它如何与数据库交互以获取数据?
  • 是的,服务器应用程序与数据库通信。
  • (不是yes or no问题) 服务器如何与数据库通信,即ADO、Entity、dapper、ODBC连接...等所有这些都有自己的方式来帮助解决这些问题。

标签: c# wpf binding datagrid


【解决方案1】:

您需要有一个跟踪更改的视图模型。基本上每个项目都有一个当前值,但也有来自数据库的最新值。

public class ViewModel
{
    //collection of subviewmodel to bind to datagrid
}

public class SubViewModel
{
    //Model instance
    //property to expose db value from model instance
    //field to store old db value
}
public class Model
{
    //db value
    //db information
}

【讨论】:

  • 我以前听说过这个并且花了几天时间试图理解它,但这对我来说没有意义。我想我有模型,这将是数据项,但是我不知道视图模型会做什么。视图模型是否会绑定到数据网格的 itemssource 字段,并包含两个模型,一个用于原始数据,一个用于修改后的数据?
  • 视图模型基本上以一种从 UI 角度来看有意义的方式呈现模型信息。视图模型上的每个对象都可以包装一个模型对象,或者(如果您对 MVVM 不太严格)它可以只是一个模型对象。在这种情况下,最好让一个视图模型对象包装每个模型对象(以便存储当前和以前的值)。
  • 那么在创建视图模型时,这是否涉及克隆原始项目并将其存储在视图模型中的单独变量中?那么如何将模型的字段绑定到数据网格?我是否只需将模型中的所有属性复制到视图模型中?
  • 这是一种方法。或者您可以只公开模型对象的属性。
  • 我宁愿那样做,但是如果viewmodel是datagrid的itemssource,那么它的属性就不需要暴露了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多