Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何防止网格';当网格';什么是数据变化?_C#_Winforms_Pass By Reference_Pass By Value_Xtragrid - Fatal编程技术网

C# 如何防止网格';当网格';什么是数据变化?

C# 如何防止网格';当网格';什么是数据变化?,c#,winforms,pass-by-reference,pass-by-value,xtragrid,C#,Winforms,Pass By Reference,Pass By Value,Xtragrid,这是一个C#Windows窗体项目。我在表格上有一个网格。为了获取网格的数据,我运行了一个SQL过程并将结果存储在一个类中。我希望有一个该类的副本,以便在用户在网格中更改这些值之前知道它们是什么。所以我把这个类分配给另一个类。然后我将第一个类指定为网格的数据源。但是,在进行更改后,原始类和副本都具有相同的值。我如何防止这种情况 这是我的代码: List<Unreceive> receivedItems = new List<Unreceive>(); List<Un

这是一个C#Windows窗体项目。我在表格上有一个网格。为了获取网格的数据,我运行了一个SQL过程并将结果存储在一个类中。我希望有一个该类的副本,以便在用户在网格中更改这些值之前知道它们是什么。所以我把这个类分配给另一个类。然后我将第一个类指定为网格的数据源。但是,在进行更改后,原始类和副本都具有相同的值。我如何防止这种情况

这是我的代码:

List<Unreceive> receivedItems = new List<Unreceive>();
List<Unreceive> listItems = mpBLL.GetMPItemsReceived();

receivedItems = listItems;
gcUnreceive.DataSource = listItems;
在这一点上,我想: 新数量=50; 原始数量=100

但我得到的是: 新数量=50; 原始数量=50


这就像我通过引用而不是通过值传递变量,但我没有在任何地方传递它。如何修复此问题,使receivedItems类不受listItems类或datagrid的影响?

是的,您是对的,它似乎是“byRef”

receivedItems=列表项; “object=object”将共享指向数据所在位置的指针,并创建指向新数据结构的新指针

最初创建新列表的过程是正确的。 List receivedItems=新列表()


您需要在原始列表中循环,并为副本列表创建新的不同列表项,将每个属性设置为主列表的值。这将为您提供两个具有单独内存存储的列表。

查看和。还可以搜索深拷贝和浅拷贝,例如查看或此。
    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;
    }