当前位置: 代码迷 >> Sql Server >> datagridview 上下行计算解决办法
  详细解决方案

datagridview 上下行计算解决办法

热度:686   发布时间:2016-04-27 18:03:01.0
datagridview 上下行计算
数据库表如下:
ID 姓名 时间
1 张三 2011/8/18 15:47
2 李四 2011/8/19 19:47
3 王五 2011/8/20 15:47
4 麻子 2011/8/21 15:27

我想用datagridview绑定后达到以下效果:
ID 姓名 时间 处理时间
1 张三 2011/8/18 15:47  
2 李四 2011/8/19 19:47 1天4小时
3 王五 2011/8/20 20:47 1天1小时
4 麻子 2011/8/21 22:47 1天2小时

也就是下一行时间减去上一行的时间得出处理的时间,并用datagridview绑定出来,该如何做呢,请赐教

------解决方案--------------------
先从数据库获取数据:
C# code
        DataTable table=new DataTable();        //。。。。加入获取数据的代码            DataColumn col = new DataColumn("时间间隔", typeof(string));        table.Columns.Add(col);        for(int i=0;i<table.Rows.Count-1;i++)        {            DateTime dt1 = DateTime.Parse(table.Rows[i][2].ToString());            DateTime dt2 = DateTime.Parse(table.Rows[i+1][2].ToString());            TimeSpan span = dt2 - dt1;            string str = string.Format("{0}{1}",span.Days,span.Hours);            table.Rows[i + 1][3] = str;   //注意正确列索引!        }
------解决方案--------------------
C# code
   private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)        {            string dateDiff = "";            if (e.ColumnIndex == 2)            {                 if (e.RowIndex >0)                {                DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];                              DataGridViewRow row2 = this.dataGridView1.Rows[e.RowIndex - 1];                 if (row != null && row2!=null)                {                    if (row.Cells["create_date"].Value.ToString() != "" && row.Cells["create_date"].Value!= null)                    {                        DateTime dt1=Convert.ToDateTime(row.Cells["create_date"].Value.ToString());                                                DateTime dt2=Convert.ToDateTime(row2.Cells["create_date"].Value.ToString());                        TimeSpan ts1 = new TimeSpan(dt1.Ticks);                        TimeSpan ts2 = new TimeSpan(dt2.Ticks);                        TimeSpan ts = ts1.Subtract(ts2).Duration();                        if (int.Parse(ts.Days.ToString()) > 0)                        {                            dateDiff += ts.Days.ToString() + "天";                        }                        if (int.Parse(ts.Hours.ToString()) > 0)                        {                            dateDiff += ts.Hours.ToString() + "小时";                        }                        e.Value = dt1.ToString() +"    "+dateDiff;                    }else                    {                    e.Value=row.Cells["create_date"].Value.ToString() ;                    }                }                }
------解决方案--------------------
SQL code
CREATE TABLE TB (id INT IDENTITY(1,1),[name] VARCHAR(20),[time] VARCHAR(20))INSERT INTO dbo.TBSELECT '张三', '2011/8/18 15:47' UNION ALLSELECT '李四', '2011/8/19 19:47' UNION ALLSELECT '王五', '2011/8/20 20:47' UNION ALLSELECT '麻子', '2011/8/21 22:27'SELECT  a.* ,ISNULL(LTRIM(DATEDIFF(HOUR, b.time, a.time) / 24) + '天' +         LTRIM(DATEDIFF(HOUR, b.time,a.time) % 24) + '小時','') AS '處理時間'FROM    dbo.TB a        LEFT JOIN dbo.TB b ON a.id = b.id + 1DROP TABLE dbo.TB/*id          name                 time                 處理時間----------- -------------------- -------------------- ------------------------------1           张三                   2011/8/18 15:47      2           李四                   2011/8/19 19:47      1天4小時3           王五                   2011/8/20 20:47      1天1小時4           麻子                   2011/8/21 22:27      1天2小時(4 個資料列受到影響)*/
  相关解决方案