2011-09-07 107 views
0

试图做一些应该相当直接的事情,但是试图让它工作的时候绞尽脑汁。基本上我想要做的是在gridview中有一个计算列,它将基于同一行中的两个值。Gridview每行总数

即Unit_Cost(money)和rate(nvarchar(20))列绑定到数据库,但我想总成本作为从2计算。我正在使用BLL来检索从我DAL数据,并相信此代码应工作 - 但它不:(

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      CropManagementDAL.TBL_RunRow run = (CropManagementDAL.TBL_RunRow) 
       ((System.Data.DataRowView)e.Row.DataItem).Row; 
      if (!run.IsUnit_costNull()) 
      { 
       if (!run.IsRateNull()) 
       { 
        _totalUnitPrice = run.Unit_cost * Convert.ToInt16(run.Rate); 
        e.Row.Cells[5].Text = _totalUnitPrice.ToString(); 
       } 
      } 
     } 
    } 

我得到一个错误“输入字符串的不正确的格式。”并强调了我的_totalUnitPrice = ...部分我确信这对你们中的一个人很容易,你们的帮助非常感谢!

+0

什么_totalUnitPrice的数据类型,也run.Unit_cost,尽量明确地设置这些。 –

+0

或者在某处可能有一个空值,为调试目的放一个try/catch –

+0

不应该是null,否则它不会得到那么远,因此我的过程如果语句。你能建议我怎么实现try/catch,因为它没有什么东西我以前设置... – will

回答

0

如果_totalUnitPrice是一个字符串,你需要conve你在传递之前,室温的数值为字符串

的一种方式做到这一点是这样的:

_totalUnitPrice = (run.Unit_cost * Convert.ToInt16(run.Rate)).ToString(); 
+0

感谢您的快速回复,实际上它是一个十进制:decimal _totalUnitPrice = 0m;但我试图使它成为一个字符串,看看是否工作,但它没有得到相同的错误,输入字符串不正确的格式:( – will

+0

好吧我得到了答案,这是因为Run.Rate是一个小数,我可以't转换为小数点(每天是一个上学日)int。谢谢你的帮助 – will

+0

很高兴你找到答案:) –