积极答复者
为什么我的DataTable只能部分赋值?

问题
-
我的问题是这样的:
现在有两个DataTable的实例,MyTable和DB_Table;
MyTable和DB_Table的结构是一样的,不同之处只是在于DB_Table由数据库查询获得,而MyTable则是由程序生成;
我希望比较两个表的行数,如果DB_Table的行数大于MyTable的话,则:MyTable的所以行的各个
列植等于DB_Table相对应行的各个列值。之后在MyTable中再加入DB_Table多余的行,使之形成
一个新的MyTable;
程序代码如下:
if (MyTable.Rows.Count == DB_Table.Rows.Count)//两个行数相同的情况
{
for (int i = 0; i < DB_Table.Rows.Count; ++i)
for (int j = 0; j < table.Columns.Count; ++j)
MyTable.Rows[i][j] = DB_Table.Rows[i][j].ToString().Trim();
MyTable.AcceptChanges();
}
else if (MyTable.Rows.Count < DB_Table.Rows.Count) //两表行数不同 {
int i = 0;
int j = 0;
for (; i < MyTable.Rows.Count; ++i)
for (; j < DB_Table.Columns.Count; ++j)
DataAccessLayer.MonthSalarysTable.Rows[i][j] = table.Rows[i][j].ToString().Trim();
for (; i < DB_Table.Rows.Count; ++i)
{
DataRow NewRow = MyTable.NewRow();
for (j = 0; j <DB_Table.Columns.Count; ++j)
NewRow[j] = DB_Table.Rows[i][j].ToString().Trim();
MyTable.Rows.Add(NewRow);
}
MyTable.AcceptChanges();
}但程序执行的结果却让人意外,但我用DataGridView来显示经过重新赋值后的MyTable时,MyTable
的行中只有第一行和最后一行与对应的DB_Table行做了更改,其余的都没有变动!这是怎么回事啊?
希望高手多多指教我这个新手一下,先谢谢了。
答案
-
告诉你调试的 办法:
1.每个表只准备1-2行数据,作为测试数据。
2.按F11单步调试,监控2个表以及每行代码执行的情况。
3.如果没有发现问题,尝试增加数据到2-3行,继续第2步骤。
一般都能找到原因。
family as water- 已标记为答案 changer168 2011年10月14日 2:40
-
行数相同并不代码两个数据源相同,比如相同主键行的其它列的值不同,两个 DataTable 都有相同的行数在另一个 DataTable 中不存在。Merge 方法对增删改的数据都能合并,所以这里建议你使用 merge 方法,而不是自己写代码
知识改变命运,奋斗成就人生!- 已标记为答案 肖小勇Moderator 2011年10月18日 1:02
全部回复
-
告诉你调试的 办法:
1.每个表只准备1-2行数据,作为测试数据。
2.按F11单步调试,监控2个表以及每行代码执行的情况。
3.如果没有发现问题,尝试增加数据到2-3行,继续第2步骤。
一般都能找到原因。
family as water- 已标记为答案 changer168 2011年10月14日 2:40
-
楼上的这位朋友,你说的方法我试过了,在调试的时候我看了一下由数据库调出来 的表DB_Table,表里面的数据是正确的,还是找不出问题在什么地方啊。
- 已编辑 changer168 2011年10月12日 7:19
-
行数相同并不代码两个数据源相同,比如相同主键行的其它列的值不同,两个 DataTable 都有相同的行数在另一个 DataTable 中不存在。Merge 方法对增删改的数据都能合并,所以这里建议你使用 merge 方法,而不是自己写代码
知识改变命运,奋斗成就人生!- 已标记为答案 肖小勇Moderator 2011年10月18日 1:02