Как сделать так, чтобы копия источника данных сетки не изменялась при изменении данных сетки? - PullRequest
0 голосов
/ 20 января 2020

Это проект C# Windows Forms. У меня есть сетка на форме. Чтобы получить данные для сетки, я запускаю процедуру SQL и сохраняю результаты в классе. Я хочу иметь копию этого класса, чтобы знать, какие значения были, прежде чем пользователь изменит их в сетке. Поэтому я назначаю класс другому классу. Затем я назначаю первый класс в качестве источника данных сетки. Однако после внесения изменений и исходный класс, и копия имеют одинаковые значения. Как мне предотвратить это?

Вот мой код:

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

receivedItems = listItems;
gcUnreceive.DataSource = listItems;

на данный момент, скажем, ReceiveItems.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;

Это похоже на то, что я передал переменную по ссылке, а не по значению, но я нигде не передавал ее. Как это исправить, чтобы класс receiveItems не зависел от того, что происходит с классом listItems или сеткой данных?

1 Ответ

0 голосов
/ 20 января 2020

Да, вы правы, что кажется "byRef"

receiveItems = listItems; «object = object» разделяет указатель на то, где данные не создают новый указатель на новую структуру данных.

Вы были на правильном пути в создании нового списка изначально. List receiveItems = new List ();

Вам необходимо l oop просмотреть исходный список и создать новых отдельных элементов списка для списка копирования - для каждого свойства устанавливается значение основной список. Это даст вам два списка с отдельным хранилищем памяти.

...