изменение данных в предыдущей форме при переносе в следующую форму и внесении изменений в данные. Почему? - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть две формы с именами form1 и form2, я должен передать datatable dt из form1 в form2. В form2 конструкторе я передаю параметр данных _dt, как вы можете видеть вниже кода и в form1 нажатии кнопки я вызываю form2 и передаю аргумент dt .i правильно получить dt в form2.

//Form1 button click event
private void Button_Click(object sender, EventArgs e)
    {
      //i have filled datatable dt
        form2 f2= new form2(dt);        
        f2.Show();
    }
//from2
 public partial class form2: Form
    {
         DataTable dt = new DataTable();
         public form2(DataTable _dt)
        {
          InitializeComponent();
          dt = _dt;       
        }
    }
//change dt by adding columns in form2

, когда я изменяю дату в form2затем данные из предыдущей формы (form1) также изменяются. Я не могу понять, почему dt из form1 изменился. Пожалуйста, скажите мне, почему это произошло? У меня есть альтернативы для этой проблемы, но я хочу знать, почему это происходит.

1 Ответ

1 голос
/ 08 ноября 2019

Потому что у вас есть только один DataTable. Когда вы назначаете объект переменной, вы не создаете копию или клон этого объекта. Все, что вы делаете, это устанавливаете эту переменную как ссылка на тот же объект. Думайте об этом как о наличии двух переменных, указывающих на одну и ту же вещь в памяти.

(В отличие от простых примитивных типов значений, таких как int или bool, которые создают копию.)

Чтобы создать копию из DataTable, используйте его .Copy() метод :

public form2(DataTable _dt)
{
    InitializeComponent();
    dt = _dt.Copy();       
}
...