none
我要统计员工迟到的时间和,请问我在DataTable如何加总呢? RRS feed

  • 问题

  • 我已经在DataTable中计算出了每个员工的迟到时间,格式为字符串0:09:10,我使用DataTable.Compute("Convert(time, 'System.TimeSpan')","Number<>'"+string.Empty+"'"),总是会报错,使用Sum加总也错,请问这个应该如何计算时间的加总呢?

    2012年5月7日 14:14

答案

  • 改用遍历的方式来加总

    DataTable dt = new DataTable();
                dt.Columns.Add("dateTimeDemo", typeof(TimeSpan));
                DataRow dr = dt.NewRow();
                dr["dateTimeDemo"] = "00:00:01";
                dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr["dateTimeDemo"] = "00:09:10";
                dt.Rows.Add(dr);
    
                TimeSpan sum = new TimeSpan();
                foreach (DataRow item in dt.Rows)
                {
                  sum =   sum.Add(TimeSpan.Parse(item["dateTimeDemo"].ToString()));
                   
                     
                }
    
                //show result
                Console.WriteLine(sum.ToString());



    • 已编辑 Shadow .Net 2012年5月7日 17:42
    • 已标记为答案 蒙田 2012年5月8日 0:26
    2012年5月7日 17:41

全部回复

  • 改用遍历的方式来加总

    DataTable dt = new DataTable();
                dt.Columns.Add("dateTimeDemo", typeof(TimeSpan));
                DataRow dr = dt.NewRow();
                dr["dateTimeDemo"] = "00:00:01";
                dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr["dateTimeDemo"] = "00:09:10";
                dt.Rows.Add(dr);
    
                TimeSpan sum = new TimeSpan();
                foreach (DataRow item in dt.Rows)
                {
                  sum =   sum.Add(TimeSpan.Parse(item["dateTimeDemo"].ToString()));
                   
                     
                }
    
                //show result
                Console.WriteLine(sum.ToString());



    • 已编辑 Shadow .Net 2012年5月7日 17:42
    • 已标记为答案 蒙田 2012年5月8日 0:26
    2012年5月7日 17:41
  • 这方法我已经试过了,我只想找一种更简单的。看来也只能用这种方式啦

    2012年5月8日 0:26
  • 您好,

    也可以透过 DataTable.RowChanged 事件 加上另一个计算栏划分的来计算哦!

    private void button1_Click(object sender, EventArgs e)
    {
    	DataTable dt = new DataTable();
    	dt.Columns.Add("dateTimeDemo", typeof(TimeSpan));
    	dt.Columns.Add("dateTimeDemoTotalSeconds", typeof(double));
    	dt.RowChanged += new DataRowChangeEventHandler(dtActividad_Changed); 
    	DataRow dr = dt.NewRow();
    	dr["dateTimeDemo"] = "00:00:01";
    	dt.Rows.Add(dr);
    	dr = dt.NewRow();
    	dr["dateTimeDemo"] = "00:09:10";
    	dt.Rows.Add(dr);
    	//计算总秒数
    	double sum = (double)dt.Compute("Sum(dateTimeDemoTotalSeconds)", "");
    	//把秒数转成TimeSpan
    	TimeSpan sumTimeSpan = TimeSpan.FromSeconds(sum);
    
    }
    private void dtActividad_Changed(object sender, System.Data.DataRowChangeEventArgs e)
    {
    
    	if (e.Row["dateTimeDemo"] != DBNull.Value  )
    		if (e.Row["dateTimeDemoTotalSeconds"] == DBNull.Value)
    			e.Row["dateTimeDemoTotalSeconds"] = ((TimeSpan)e.Row["dateTimeDemo"]).TotalSeconds;
    }


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年5月8日 5:09
  • 不错,学习了

    给我写信: QQ我:点击这里给我发消息

    2012年5月8日 14:47