none
为什么我的DataTable只能部分赋值? RRS feed

  • 问题

  • 我的问题是这样的:

    现在有两个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行做了更改,其余的都没有变动!这是怎么回事啊?

    希望高手多多指教我这个新手一下,先谢谢了。

    2011年10月12日 4:05

答案

  • 告诉你调试的 办法:

    1.每个表只准备1-2行数据,作为测试数据。

    2.按F11单步调试,监控2个表以及每行代码执行的情况。

    3.如果没有发现问题,尝试增加数据到2-3行,继续第2步骤。

     

    一般都能找到原因。


    family as water
    • 已标记为答案 changer168 2011年10月14日 2:40
    2011年10月12日 4:42
  • 行数相同并不代码两个数据源相同,比如相同主键行的其它列的值不同,两个 DataTable 都有相同的行数在另一个 DataTable 中不存在。Merge 方法对增删改的数据都能合并,所以这里建议你使用 merge 方法,而不是自己写代码
    知识改变命运,奋斗成就人生!
    2011年10月18日 1:02
    版主

全部回复

  • 告诉你调试的 办法:

    1.每个表只准备1-2行数据,作为测试数据。

    2.按F11单步调试,监控2个表以及每行代码执行的情况。

    3.如果没有发现问题,尝试增加数据到2-3行,继续第2步骤。

     

    一般都能找到原因。


    family as water
    • 已标记为答案 changer168 2011年10月14日 2:40
    2011年10月12日 4:42
  • 楼上的这位朋友,你说的方法我试过了,在调试的时候我看了一下由数据库调出来 的表DB_Table,表里面的数据是正确的,还是找不出问题在什么地方啊。
    2011年10月12日 7:19
  • DataSet DataTable 的 Merge 方法就是干合并的事的,不需要单独写
    知识改变命运,奋斗成就人生!
    2011年10月12日 10:12
    版主
  • 行数相同并不代码两个数据源相同,比如相同主键行的其它列的值不同,两个 DataTable 都有相同的行数在另一个 DataTable 中不存在。Merge 方法对增删改的数据都能合并,所以这里建议你使用 merge 方法,而不是自己写代码
    知识改变命运,奋斗成就人生!
    2011年10月18日 1:02
    版主