提问人:boilers222 提问时间:1/20/2020 最后编辑:Reza Aghaeiboilers222 更新时间:1/20/2020 访问量:72
如何防止网格数据源的副本在网格数据更改时不被更改?
How do I prevent a copy of a grid's datasource from not getting changed when the grid's data changes?
问:
这是一个 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; originalQuantity = 100;
但我得到的是: newQuantity = 50; 原始数量 = 50;
这就像我通过引用而不是按值传递变量,但我没有在任何地方传递它。如何解决此问题,以便 receivedItems 类不受 listItems 类或数据网格发生的情况的影响?
答:
是的,你是对的,它似乎是“byRef”
receivedItems = 列表项目; “object = object”将共享指向数据未所在的位置的指针,从而创建一个指向新数据结构的新指针。
您最初在创建新列表时走在正确的轨道上。 列表 receivedItems = new List();
您需要遍历原始列表并为复制列表创建新的非重复列表项 - 将每个属性设置为主列表的值。这将为您提供两个具有独立内存存储的列表。
上一个:在 c 中按值传递数组#
下一个:不一致的 null 赋值
评论