问题描述如下:1)我先前有一个很普通的查询统计表,只有数字,记录,比如:
材料名称           型号规格    数量 计划单价     合计
------------------------------------------------------------------
线材  10MM       1   10.00     10.00
普通硅酸盐水泥  P.O42.5R     10   11.00        110.00
2)后来过了一段时间,客户要求加一个统计,于是我用了如下方法加了
Dim dr As DataRow = ds.Tables("table").NewRow()
dr("amount") = ds.Tables("table").Compute("sum(amount)", "")
dr("matname") = "合计"
dr("plmoney") = ds.Tables("table").Compute("sum(plmoney)", "")
ds.Tables("table").Rows.Add(dr)
显示效果:
我先前有一个很普通的查询统计表,只有数字,记录,比如:
材料名称           型号规格    数量 计划单价     合计
------------------------------------------------------------------
线材  10MM       1   10.00     10.00
线材  18MM        10   11.00        110.00合计                          11                  120.00
3)随着数据量大,客户说,合计显示在后面不好找,要显示到前面吧,显示成效果如下:
材料名称           型号规格    数量 计划单价     合计
------------------------------------------------------------------
合计                          11                  120.00线材  10MM       1   10.00     10.00
线材  18MM        10   11.00        110.00我又一次屈服了,做法如下:
给表增加一列sortflag,用来排序Dim dcol As DataColumn = ds.Tables("table").Columns.Add("SortFlag", System.Type.GetType("System.Int32"))
Dim i As Int64 = 0
For i = 0 To ds.Tables("table").Rows.Count - 1
  ds.Tables("table").Rows(i).BeginEdit()
  ds.Tables("table").Rows(i).Item(ds.Tables("table").Columns.Count - 1) = 0
  ds.Tables("table").Rows(i).EndEdit()
Next而在汇总前,也给此列一个值
dr("SortFlag") = 1
然后写了
ds.Tables("table").Rows.Add(dr)
一句4)后来他被我惯坏了,又有了新的想法,想要上下都有合计的效果。
材料名称           型号规格    数量 计划单价     合计
------------------------------------------------------------------
合计                          11                  120.00线材  10MM       1   10.00     10.00
线材  18MM        10   11.00        110.00合计                          11                  120.00没问题!无非就是将ds.Tables("table").Rows.Add(dr)写两次,一次dr("SortFlag") = 1,一次dr("SortFlag") = -1
如果问题仅仅是如此简单就好了。他要求所有的查询表都这样。我再次吐血了。为了实现我写了一个类调用,然后在数据库里动态配置。
=====================================================================================
*************************************************************************************
=====================================================================================
问题出来了:
public static void AddSummationLine(DataSet ds)
{
   DataColumn dcol = new DataColumn();
   int iCount;
   dcol = ds.Tables[0].Columns.Add("SortFlag", System.Type.GetType("System.Int32"));
   for(iCount=0;iCount< ds.Tables[0].Rows.Count -1;iCount++)
    {
       ds.Tables[0].Rows[iCount].BeginEdit();
       ds.Tables[0].Rows[iCount].Item(ds.Tables("table").Columns.Count - 1) = 0;///???????????这句是错的!①
       ds.Tables[0].Rows[iCount].EndEdit();
     }
 }
摘取程序片段如上。如果真的是①处的效果就万事大吉了,当我ds.Tables[0].Rows[iCount].后,发现没有.Item,只有.ItemArray 
===============================================================
***************************************************************
===============================================================
说的比较罗索,希望能把问题描述清楚。现在想求教①处该如何写,才能更改我新增列的值!

解决方案 »

  1.   

    其实,我认为没有必要加一个字段,只要用Rows.insertat在第一行加一条记录,用rows.add在最后加一条记录就可以了。
      

  2.   

    for(iCount=0;iCount< ds.Tables[0].Rows.Count -1;iCount++)
        {
           ds.Tables[0].Rows[iCount].BeginEdit();
           ds.Tables[0].Rows[iCount].Item(ds.Tables("table").Columns.Count - 1) = 0;///???????????这句是错的!①
           ds.Tables[0].Rows[iCount].EndEdit();
         }
    要完成什么功能?
      

  3.   

    因为数据已经读取到dataset里了,而
    Dim dcol As DataColumn = ds.Tables("table").Columns.Add("SortFlag", System.Type.GetType("System.Int32"))
    是在数据读到ds里后写的,所以sortflag是空值
    而我显示的时候想用-1,0,1来排序,所有记录的sortflag=0,在头部显示的合计用sortflag=1,而底部的sortflag=-1
    for(iCount=0;iCount< ds.Tables[0].Rows.Count -1;iCount++)
        {
           ds.Tables[0].Rows[iCount].BeginEdit();
           ds.Tables[0].Rows[iCount].Item(ds.Tables("table").Columns.Count - 1) = 0;///???????????这句是错的!①
           ds.Tables[0].Rows[iCount].EndEdit();
         }
    是用来给所有记录sortflag字段0值
      

  4.   

    试试下面的代码
    for(iCount=0;iCount< ds.Tables[0].Rows.Count -1;iCount++)
        {
           ds.Tables[0].Rows[iCount]["SortFlag"] = 0;
         }
      

  5.   

    onlysix(onlysix) ( ) 说的有道理,我去实验一下。只是为什么在页面上
    ds.Tables[0].Rows[iCount].Item(ds.Tables[0].Columns.Count - 1)是可以的
    而写成抽象类的时候就没有Item,而只有ItemArray 了?
    是哪个概念理解有问题吗?请指点