DataTable 更改数据列的类型方法:无效的聚合函数 Sum()和类型 String 的用法;

DataTable.Compute可以进行聚合函数的操作,如sum(),但是在进行DataTable遇到如标题的错误:无效的聚合函数 Sum()和类型 String 的用法;原因是因为当前栏的数据类型是String,非数值型,所以报错了;- 不信你可以去数据库查看下该字段的类型;

解决方法有两个:

第一种: 直接去数据库修改表结构设计的类型,改成数值型,如我就是这么懒,直接将varchar类型改成了 float;--然后bug 就over了;

第二种:那就是后端在通过compute聚合函数计算时,提前转换成类型,改成数值,理论上也是可行的(就是我试过,但是后面没有实现效果,我就变成了第一种方法)

需要注意的是:修改类型将数据重新写入需要转换为对应类型才能写入。

/// <summary>
/// 修改数据表DataTable某一列的类型和记录值(正确步骤:1.克隆表结构,2.修改列类型,3.修改记录值,4.返回希望的结果)
/// </summary>
/// <param name="argDataTable">数据表DataTable</param>
/// <returns>数据表DataTable</returns>  

 private static DataTable UpdateDataTable(DataTable argDataTable)
   {
       DataTable dtResult = new DataTable();
       //克隆表结构
       dtResult = argDataTable.Clone();
       // 如果你只是要修改数据类型 看这个就行
       foreach (DataColumn col in dtResult.Columns)
       {
           if (col.ColumnName == "数量")
           {
               //修改列类型
               col.DataType = typeof(int);
           }
           if (col.ColumnName == "日期")
           {
               //修改列类型
               col.DataType = typeof(String);
           }
       }
       //写入数据
       foreach (DataRow row in argDataTable.Rows)
       {
           DataRow rowNew = dtResult.NewRow();
           rowNew["姓名"] = row["姓名"];
           //修改记录值
            rowNew["日期"] = Convert.ToDateTime(row["日期"]).ToString("yyyy-MM-dd").ToString();
           //修改记录值
           rowNew["数量"] = GvNet.Cvt.ToInt16(row["数量"].ToString()); 

           dtResult.Rows.Add(rowNew);
       }
       return dtResult;
   }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值