我有一个问题。让我们解释一下: 我创建了一个DataTable' DataT'变量和添加到此变量的行.SameTime我有datagridview。在我发布了DataT'之后到DataGridView的DataSource属性。 我得到了DataT' Rows.Count属性。它的值10.但当我移除5行DataGridView时,此值从10减少到5。 那么为什么减少我的价值我只是删除DataGridView的行,但我没有删除' DataT'虽然行计数为' DataT'从10减少到5。 我没有解决这个问题。
编辑: 是的我绑定了datatable.But同样的问题还有其他状态。我用一个例子解释:
int num;
MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &num);
int a;
char filename[1000];
MPI_Comm_rank(MPI_COMM_WORLD, &a);
sprintf(filename, "file.txt", a);
FILE *fp = fopen(filename, "w");
if (num){
for (int i = 0; i < 10; i++) {
fprintf(fp, genRandom()); // genRandom() - gives me error because different char types
}
fclose(fp);
}
MPI_Finalize();
答案 0 :(得分:1)
在Henk Holterman中指出的comment有两个原因使Table2
更改
由于Table1
用作网格DataSource
,因此网格中的任何更改都会反映在网格中。这是GridView
的预期行为。
GridView
有自己的Rows
集合,在设置DataSource
时会更新。对Rows
集合的任何更改(如删除项目)都将应用于DataTable
设置为数据源。结果datagridview1.Rows.RemoveAt(0);
实际上间接从Table1
引用的对象中删除了行。
您的两个变量(Table1
和Table2
)都指向同一个对象 - 因此,只要DataTable发生任何事情(即GridView删除的行),当您检查时,更改就会显示变量之一。
以下代码执行&#34;浅拷贝&#34;当你似乎期望完全克隆类似于int
的行为时:
Table2 = Table1;
在该作业完成后,Table1
和Table2
都会引用在DataTable
行上创建的DataTable Table1 = new DataTable();
。
查看更多What is the difference between a deep copy and a shallow copy?