ORM,DataBinding 到 DataGridView:插入/删除未保存到数据库的新行

2024-01-17

我对 ORM 还很陌生,目前我正在尝试 Telerik OpenAccess ORM,但问题实际上可能并不特定于该 ORM,而且我还没有完全确定该 ORM。

我想要实现的是绑定 DataGridView 以显示 Customers 对象的集合,其中显示客户表中的所有客户。

我已将其绑定到 BindingSource 并将 BindingSource 绑定到 DataGridView 控件。

我可以成功修改现有项目(使用 OpenAccess ORM 的 SaveChanges 方法)。当我保存时,内容会按我的预期保存回数据库中。

但是,如果我从 DataGridView 中删除一行或添加新行,它们不会保存到数据库中,也不会出现任何错误消息或异常。

理想情况下,我希望能够使用 ORM 执行所有可能的 CRUD 操作,就像我能够使用典型的 DataTable 执行此操作一样......

执行绑定的代码如下所示:

        List<Customer> ukCustomers = (from c in diagrams.Customer
                              where c.Country == "UK"
                              select c).ToList();

        customersBindingSource.DataSource = ukCustomers;
        customersBindingSource.AllowNew = true;

我当前的猜测是,用户添加到 DataGridView 的新行不是列表的一部分,而是“独立的”客户实例?我本以为它们会自动添加到列表中。对于已删除的行也是如此,我认为这些行会自动从列表中删除,并且 ORM 中的 SaveChanges 方法能够拾取它吗?

我应该做的不仅仅是绑定吗? 有没有人在这方面取得过成功,总的来说,您使用 WinForms 的数据绑定经验以及您选择的 ORM(不一定是 Telerik 的)有多成功?

Thanks.


你的怀疑是正确的。您将网格绑定到“独立”对象列表,虽然每个对象都是自跟踪的,但该列表不是。这就是为什么对现有对象的更改可以按预期工作,但添加/删除却不能。

一种解决方案是使用可观察集合而不是标准列表。然后,您可以以相同的方式处理绑定,但通过根据需要从上下文中添加/删除项目来响应添加/删除事件。

基本例:

  private PropertyManagerModel.DemoDBEntityDiagrams context;
    public Form1()
    {
        InitializeComponent();
        context = new DemoDBEntityDiagrams();
        LoadCommunities();
    }

   private void LoadCommunities()
    {         
        var communityList = new ObservableCollection<Community>(context.Communities);
        communityList.CollectionChanged += new NotifyCollectionChangedEventHandler(communityList_CollectionChanged);
        this.dataGridView1.DataSource = new BindingSource() { DataSource=communityList};
    }

    void communityList_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
            context.Add(e.NewItems);

        if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove)
            context.Delete(e.OldItems);

        context.SaveChanges();
    }      

据我所知,所有 ORMS 都是如此。希望这可以帮助!

Regards,

约书亚·霍尔特

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORM,DataBinding 到 DataGridView:插入/删除未保存到数据库的新行 的相关文章

  • 编写此代码片段的有效方法是什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 更有效和 或更短地重写此代码以节省字节并显得不那么冗长的方法 if N 2 0 N 6 N 8 N 10 N 12 N 14 N 16 N
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • C free() 是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 malloc 和 free 如何工作 https stackoverflow com questions 1119134 how malloc and free work include
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • 全局使用和 .NET Standard 2.0

    我最近意识到我可以使用 C 10 功能文件范围的命名空间在 NET Standard 2 0 项目中也可以通过设置
  • C++ 将联合强制转换为其成员类型之一

    以下对我来说似乎完全符合逻辑 但不是有效的 C 联合不能隐式转换为其成员类型之一 有人知道为什么不这样做的充分理由吗 union u int i char c function f int i int main u v v i 6 f v
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 在 C++11 中移出 stdpriority_queue 的元素

    最小的工作示例 include
  • 如何在 C# 中获取 Json 数组?

    我有一个像这样的 Json 字符串 我想将它加载到 C 数组中 当我尝试这样做时 我收到异常 我的字符串 customerInformation customerId 123 CustomerName Age 39 Gender Male
  • C++ 到 C# 事件处理

    所以我有我的C WinForm 应用程序 我从中调用我的C CLI MFC dll图书馆 但也有一些events在我的 C 库上 甚至此事件也发生在该库的本机 非 CLI 部分 我需要从我的 C 应用程序调用一些代码 并获取一些有关此事件的
  • 如何使用 CSI.exe 脚本参数

    当你运行csi exe 安装了 Visual Studio 2015 update 2 您将得到以下语法 Microsoft R Visual C Interactive Compiler version 1 2 0 51106 Copyr
  • EnumDisplayDevices 与 WMI Win32_DesktopMonitor,如何检测活动监视器?

    对于我当前的 C 项目 我需要为在大量计算机上连接并处于活动状态的每个监视器检测一个唯一的字符串 研究指出了两种选择 使用 WMI 并查询 Win32 DesktopMonitor 以获取所有活动监视器 使用 PNPDeviceID 来唯一
  • 为什么 f(i = -1, i = -1) 是未定义的行为?

    我正在读关于违反评估顺序 http en cppreference com w cpp language eval order 他们举了一个令我困惑的例子 1 如果标量对象上的副作用相对于同一标量对象上的另一个副作用是无序的 则行为未定义
  • 如何更改 WPF TabControl 的 ItemTemplate 的样式以便设置选项卡标题的背景颜色?

    我使用 WPF TabControl 的 ItemTemplate 属性来绑定每个 TabItem 标头的内容 我还使用 ItemContainerStyle 属性将 TabItem 的内容设置为动态选择的用户控件 此方法 100 按预期工
  • Autoconf 问题:“错误:C 编译器无法创建可执行文件”

    我正在尝试使用 GNU 自动工具构建一个用 C 编写的程序 但显然我设置错误 因为当configure运行 它吐出 configure error C compiler cannot create executables 如果我看进去con
  • Linq.Select() 中的嵌套表达式方法调用

    I use Select i gt new T 每次手动点击数据库后将我的实体对象转换为 DTO 对象 以下是一些示例实体和 DTOS 用户实体 public partial class User public int Id get set
  • 将 Swagger 与命名空间版本的 WebApi 结合使用

    我已经找到了如何使用基于名称空间的 WebAPI 版本这个班 https aspnet codeplex com SourceControl changeset view dd207952fa86 Samples WebApi Namesp
  • 将 char 绑定到枚举类型

    我有一段与此非常相似的代码 class someclass public enum Section START MID END vector section Full void ex for int i 0 i section

随机推荐

  • 在手机上看到的带有 mathjax 的博客

    我正在使用 mathjax我的博客点博客 http ochopatas blogspot mx 在电脑上看效果很好 但在手机上看公式就不会变形 我找到了这个其他博客点博客 http imflaud blogspot mx 2016 07 i
  • AngularJS 与 .NET MVC 捆绑缩小错误

    我一直在 NET MVC 网站内开发一个大型 AngularJS 应用程序 我已经花了很长时间没有测试它是否会使用捆绑优化功能成功缩小 BundleTable EnableOptimizations True 当然 它失败了 我一直在玩捆绑
  • 实施“make check”或“make test”

    如何用Make实现一个简单的回归测试框架 我正在使用 GNU Make 如果这很重要的话 我当前的 makefile 看起来像这样 为简单起见进行了编辑 OBJS jscheme o utility o model o read o eva
  • Heroku + Github 部署策略

    我正在开发一个 Web 应用程序 在 Github 上托管源代码并在 Heroku 上运行该应用程序 一切工作正常 但我有一个问题 我无法解决 在部署代码之前 我运行一些脚本来优化代码 缩小 连接文件等 heroku 应用程序仅使用该应用程
  • E/libprocessgroup:set_timerslack_ns 写入失败:不允许操作?

    当我运行 Android 应用程序时 我在 Logcat 中遇到了这个问题 有谁知道这个问题以及如何解决它 该应用程序不会崩溃 但是当我每次尝试在 Google 地图的自动完成搜索栏中输入内容时 它都会关闭该活动 并返回上一个 在谷歌地图上
  • 以静默方式安装 Dot net 4.5 作为依赖项

    我有一个静默安装的设置 但它依赖于 dot net Framework 4 5 那么我该如何创建 也可以静默安装依赖项的安装程序 Setup is created in Install Shield and it is a wpf appl
  • 多边形算法中的点有时会给出错误的结果[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在 StackOverflow 上看到了我在 PHP 代码中实现的 多边形中的点 光线跟踪算法 大多数时候 它工作得很
  • 尝试在 Laravel 中删除一行时出现错误“调用未定义的方法 stdClass::delete()”

    我从数据库和本地存储中删除图像的方法 public function destroy id image DB table images gt where id id gt first print r image return end Fil
  • 如何让 cimport 在 Cython 中工作?

    我的目录结构如下 我的模块 init py A init py a pyx B init py b pyx 在 b pyx 中 我想从 A a 导入函数 常规的 python 导入可以工作 但 cimport 总是失败 另外 我分别编译 A
  • 如何从 Azure 移动服务返回异常

    我制作了一个在本地运行良好的 Azure 移动服务 然后 我将 Azure 移动服务发布到云 网站显示它当前正在运行 然后我做了一个GET Request到我发布的网站 它返回以下内容 状态 500 内部服务器错误 500 内部服务器错误
  • Typeorm 打字稿存储库 findone - 类型参数不可分配给“FindOneOptions”类型的参数

    这是我的配置文件 import Column Entity PrimaryGeneratedColumn from typeorm Entity name guild configurations export class GuildCon
  • PostgreSQL:不区分大小写的字符串比较

    PostgreSQL 有一个简单的忽略大小写比较吗 我想更换 SELECT id user name FROM users WHERE lower email IN lower email protected cdn cgi l email
  • 如何将 MVC 视图返回到 $.Ajax JSON POST

    我正在将 Ajax POST 发送到带有参数的 MVC 控制器函数 并成功返回 JasonResult 我需要做的是返回当前视图 就好像它不是 JSON 请求并且我正在返回视图数据 Viewdata已更新 页面需要重新绘制 简而言之 我希望
  • Android - 是否有可能制作无限画布?

    目前我正在开发允许用户绘图的应用程序 简单的想 只需扩展 Canvas 类 大部分事情就完成了 这是我最初的想法和想法 但由于画布相当小 因为这只是用户在屏幕上看到的内容 因此没有太多可以绘制的空间 浏览我发现的文档translate 允许
  • 粘性页脚 CSS

    我有一个非常基本的网站 页眉 内容 页脚没有侧边栏或任何东西 问题是内容区域与页脚重叠 我已经尝试了所有粘性页脚修复 即 csstricks ryanfait com 和我在 google 上找到的其他一些以及这里的一些 但它们都不起作用
  • 通过应用程序在 Google Play 商店中的屏幕截图质量 - 变得压缩、模糊和损坏

    通过 Google Play 应用程序查看应用程序的屏幕截图时 显示的屏幕截图经过压缩且质量较低 当通过桌面网络浏览器查看 Play 应用商店页面时 它们是完整质量的 我尝试了几个建议 包括 尝试 JPEG 和 PNG 使用较低尺寸和较高尺
  • 如何从现有 Kubernetes 清单构建 Helm 图表

    我是 k8s 的新手 我有作业 这就是我的情况 有一个面向微服务的应用程序 使用十个容器构建 它有一个docker compose文件以方便设置 现在我的任务是将其部署到 Kubernetes 中 我的想法 转换docker compose
  • 是否可以在 Virtualenv 沙箱上添加 PyQt4/PySide 包?

    我在用着虚拟环境 http pypi python org pypi virtualenv在我的开发环境中获利web py simplejson和其他面向网络的包 我将使用 Qt 开发一个简单的 python 客户端 以重用一些使用 web
  • 两个不同的“字符串”是同一个对象实例?

    该代码非常不言自明 我预计当我做的时候a1 and b1我正在创建两个包含相同文本的不同字符串实例 所以我想a1 b1是真的但是object ReferenceEquals a1 b1 是假的 但事实并非如此 为什么 make two se
  • ORM,DataBinding 到 DataGridView:插入/删除未保存到数据库的新行

    我对 ORM 还很陌生 目前我正在尝试 Telerik OpenAccess ORM 但问题实际上可能并不特定于该 ORM 而且我还没有完全确定该 ORM 我想要实现的是绑定 DataGridView 以显示 Customers 对象的集合