c# - 如何防止网格数据源的副本在网格数据更改时不被更改?
问题描述
这是一个 C# Windows 窗体项目。我在表格上有一个网格。为了获取网格的数据,我运行了一个 SQL 过程并将结果存储在一个类中。我想拥有该类的副本,以便在用户在网格中更改它们之前知道这些值是什么。所以我把这个班级分配给另一个班级。然后我将第一个类指定为网格的数据源。但是,进行更改后,原始类和副本都具有相同的值。我该如何防止这种情况?
这是我的代码:
List<Unreceive> receivedItems = new List<Unreceive>();
List<Unreceive> listItems = mpBLL.GetMPItemsReceived();
receivedItems = listItems;
gcUnreceive.DataSource = listItems;
此时,假设 receivedItems.quantity 和 listItems.quantity 的值为 100。
用户更改网格中的数据,因此数量为 50。这会触发以下代码:
private void gvUnreceive_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
DevExpress.XtraGrid.Views.Grid.GridView gridView = (DevExpress.XtraGrid.Views.Grid.GridView) sender;
int index = gridView.GetDataSourceRowIndex(rowHandle);
Unreceive selectedItem = listItems[index];
Unreceive originalItem = receivedItems[index];
int newQuantity = selectedItem.quantity;
int originalQuantity = originalItem.quantity;
}
此时我想要:newQuantity = 50; 原始数量 = 100;
但我得到的是: newQuantity = 50; 原始数量 = 50;
就像我通过引用而不是通过值传递了一个变量,但我没有在任何地方传递它。我该如何解决这个问题,以便收到的项目类不受 listItems 类或数据网格发生的事情的影响?
解决方案
是的,你是对的,它似乎是“byRef”
收到的物品 = 列表物品;“object = object”将共享指向数据所在的指针,创建指向新数据结构的新指针。
最初,您在创建新列表时走在了正确的轨道上。List receivedItems = new List();
您需要遍历原始列表并为副本列表创建新的不同列表项- 将每个属性设置为主列表的值。这将为您提供两个具有单独内存存储的列表。
推荐阅读
- mysql - MYSQL查询优化题使用Count和2个表
- javascript - 检测 Chrome 和 Edge Chromium 在我的网站上不起作用
- reactjs - 反应 event.target 设置状态。设置列表项背景颜色
- excel - 问:如何以横向格式打印 EXCEL / VBA 用户表单?
- spring-boot - 这些 Google 登录方法有什么区别?
- react-native - 使用 axios 在本机反应中发送文件时出现网络错误
- ruby-on-rails-5 - ROR - 尝试使用嵌套表单创建对象
- python - 谷歌云虚拟机实例的硒替代品?
- c++ - 为什么我在 devc++ 中编译代码时会出现此错误?
- angular - 在数据库错误消息中找不到电子邮件