当它转移到下一个表格并在数据表中进行更改时,以前的表格数据表会发生变化,为什么?
previous form datatable change when it transfered to next form and make changes in datatable,Why?
我有两个名为 form1
和 form2
的表格,我必须将数据表 dt
从 form1
传输到 form2
。在 form2
构造函数我传递数据表参数 _dt
正如您在下面的代码中看到的那样,在 form1
按钮中单击我调用 form2
并传递参数 dt
.i properply get 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
) 也 change.i 无法理解为什么 dt
的 form1
changed.please 告诉我为什么会这样?我有解决这个问题的方法,但我想知道为什么会这样。
因为你只有一个DataTable
。当您将对象分配给变量时,您不会创建该对象的副本或克隆。您所做的只是将该变量设置为 reference 到 same 对象。可以把它想象成有两个变量指向内存中的同一个东西。
(相对于简单的原始值类型,如 int
或 bool
,它们会创建一个副本。)
要创建 DataTable
的 副本,请使用 its .Copy()
method:
public form2(DataTable _dt)
{
InitializeComponent();
dt = _dt.Copy();
}
我有两个名为 form1
和 form2
的表格,我必须将数据表 dt
从 form1
传输到 form2
。在 form2
构造函数我传递数据表参数 _dt
正如您在下面的代码中看到的那样,在 form1
按钮中单击我调用 form2
并传递参数 dt
.i properply get 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
) 也 change.i 无法理解为什么 dt
的 form1
changed.please 告诉我为什么会这样?我有解决这个问题的方法,但我想知道为什么会这样。
因为你只有一个DataTable
。当您将对象分配给变量时,您不会创建该对象的副本或克隆。您所做的只是将该变量设置为 reference 到 same 对象。可以把它想象成有两个变量指向内存中的同一个东西。
(相对于简单的原始值类型,如 int
或 bool
,它们会创建一个副本。)
要创建 DataTable
的 副本,请使用 its .Copy()
method:
public form2(DataTable _dt)
{
InitializeComponent();
dt = _dt.Copy();
}