DataGrid模板里有一条或N条数据,现在的问题是要计算出模板里面开始时间、结束时间控件上的值,例如有这样几条时间的数据,开始时间是:xx年xx月xx日xx小时,结束时间是:xx年xx月xx日xx小时,在计算的时候必须是这样计算,如果DataGrid里面有三条这样的数据,分别的日期时间都不同,我要将第二条的开始时间减去第一条的开始时间(的到的就是第一条的出行时间数),第三条 也就是最后一条数据的时候就拿它的结束时间减去第二条的开始时间(的到的就是第二条的出行时间数),计算出来的时间数都有一个TextBox用来显示,如果有N条数据的中间的计算方式就是按照第一条的时间方式去计算。
求高手帮忙解决!谢谢。

解决方案 »

  1.   

    目前我是这样做的,但算的有问题
     public void TimeCalculation()
            {
                #region 存在数据的处理            if (List1 == null)
                {
                    return;
                }            if (List1.Count() == 1)
                {
                    foreach (实体 obj in DataGrid.ItemsSource)
                    {                    if (obj == null)
                        {
                            return;
                        }                    TextBox myDaysTime = DataGrid.Columns[4].GetCellContent(obj).FindName("txtTOTALDAYS") as TextBox;                    if (myDaysTime == null)
                        {
                            return;
                        }                    //如果出发时间与到达时间相等,视为当天往返,时间算一天
                        if (List1[0].STARTDATE == List1[0].ENDDATE && 方案设置实体.ANDFROMTHATDAY == "1")
                        {
                            myDaysTime.Text = "1天";
                        }
                        else
                        {
                            double TotalDays = 0;//出行天数
                            int TotalHours = 0;//出行小时
                            TimeSpan tsStart = new TimeSpan(Convert.ToDateTime(List1[0].STARTDATE).Ticks);
                            TimeSpan tsEnd = new TimeSpan(Convert.ToDateTime(List1[0].ENDDATE).Ticks);
                            TimeSpan ts = tsEnd.Subtract(tsStart).Duration();                        TotalDays = ts.Days;
                            TotalHours = ts.Hours;                        int customhalfday = 方案设置实体.CUSTOMHALFDAY.ToInt32();                        if (TotalHours >= customhalfday)//如果时间大于等于方案设置的时间,按方案标准时间计算
                            {
                                TotalDays += 1;
                            }
                            else
                            {
                                if (TotalHours > 0)
                                    TotalDays += 0.5;
                            }
                            myDaysTime.Text = TotalDays.ToString() + "天";
                        }
                    }
                }
                #endregion            #region 存在两条数据的处理
                if (List1.Count() == 2)
                {
                    foreach (实体 obje in DataGrid.ItemsSource)
                    {                    if (obje == null)
                        {
                            return;
                        }
                        if (List1 == null)
                        {
                            return;
                        }                    TextBox myDaysTime = DaGrs.Columns[4].GetCellContent(obje).FindName("txtTOTALDAYS") as TextBox;                    if (myDaysTime == null)
                        {
                            return;
                        }                    //如果出发时间与到达时间相等,视为当天往返,时间算一天
                        if (List1[0].STARTDATE.Date == List1[1].ENDDATE.Date && 方案设置实体.ANDFROMTHATDAY == "1")
                        {
                            myDaysTime.Text = "1天";
                        }
                        else
                        {
                            double TotalDays = 0;
                            int TotalHours = 0;
                            TimeSpan tsStart = new TimeSpan(Convert.ToDateTime(List1[0].STARTDATE).Ticks);
                            TimeSpan tsEnd = new TimeSpan(Convert.ToDateTime(List1[1].ENDDATE).Ticks);
                            TimeSpan ts = tsEnd.Subtract(tsStart).Duration();                        TotalDays = ts.Days;
                            TotalHours = ts.Hours;                        int customhalfday = 方案设置实体.CUSTOMHALFDAY.ToInt32();                        if (TotalHours >= customhalfday)//如果出行时间大于等于方案设置的时间,按方案标准时间计算
                            {
                                TotalDays += 1;
                            }
                            else
                            {
                                if (TotalHours > 0)
                                    TotalDays += 0.5;
                            }
                            myDaysTime.Text = TotalDays.ToString() + "天";
                        }
                    }
                }
                #endregion            #region 存在多条的处理
                if (List1.Count() > 2)
                {
                    foreach (实体 objs in DataGrid.ItemsSource)
                    {
                        if (objs == null)
                        {
                            return;
                        }                    if (List1 == null)
                        {
                            return;
                        }                    TextBox myDaysTime = DaGrs.Columns[4].GetCellContent(objs).FindName("txtTOTALDAYS") as TextBox;                    if (myDaysTime == null)
                        {
                            return;
                        }                    for (int i = 0; i < List1.Count(); i++)
                        {
                            //如果是最后一条记录
                            if (i == List1.Count() - 1)
                            {
                                //如果出发时间与到达时间相等,视为当天往返,出行时间算一天
                                if (List1[i].STARTDATE.Date == List1[i - 1].ENDDATE.Date && 方案设置实体.ANDFROMTHATDAY == "1")
                                {
                                    myDaysTime.Text = "1天";
                                }
                                else
                                {
                                    double TotalDays = 0;//天数
                                    int TotalHours = 0;//小时
                                    TimeSpan tsStart = new TimeSpan(Convert.ToDateTime(List1[i].STARTDATE).Ticks);
                                    TimeSpan tsEnd = new TimeSpan(Convert.ToDateTime(List1[i - 1].ENDDATE).Ticks);
                                    TimeSpan ts = tsEnd.Subtract(tsStart).Duration();                                TotalDays = ts.Days;
                                    TotalHours = ts.Hours;                                int customhalfday = 方案设置实体.CUSTOMHALFDAY.ToInt32();                                if (TotalHours >= customhalfday)//如果出行时间大于等于方案设置的时间,按方案标准时间计算
                                    {
                                        TotalDays += 1;
                                    }
                                    else
                                    {
                                        if (TotalHours > 0)
                                            TotalDays += 0.5;
                                    }
                                    myDaysTime.Text = TotalDays.ToString() + "天";
                                }
                            }
                            else
                            {
                                if (i > 0)
                                {
                                    //如果出发时间与到达时间相等,视为当天往返,出行时间算一天
                                    if (List1[i].STARTDATE.Date == List1[i - 1].ENDDATE.Date && 方案设置实体.ANDFROMTHATDAY == "1")
                                    {
                                        myDaysTime.Text = "1天";
                                    }
                                    else
                                    {
                                        double TotalDays = 0;//天数
                                        int TotalHours = 0;//小时
                                        TimeSpan tsStart = new TimeSpan(Convert.ToDateTime(List1[i].STARTDATE).Ticks);
                                        TimeSpan tsEnd = new TimeSpan(Convert.ToDateTime(List1[i - 1].STARTDATE).Ticks);
                                        TimeSpan ts = tsEnd.Subtract(tsStart).Duration();                                    TotalDays = ts.Days;
                                        TotalHours = ts.Hours;                                    int customhalfday = 方案设置实体.CUSTOMHALFDAY.ToInt32();                                    if (TotalHours >= customhalfday)//如果出差时间大于等于方案设置的时间,按方案标准时间计算
                                        {
                                            TotalDays += 1;
                                        }
                                        else
                                        {
                                            if (TotalHours > 0)
                                                TotalDays += 0.5;
                                        }
                                        myDaysTime.Text = TotalDays.ToString() + "天";
                                    }
                                }
                            }
                        }
                    }
                }
                #endregion
            }
      

  2.   

    Google: Gridview 72 般绝技
    可能会给你灵感
      

  3.   

    我想要的结果就是,在多条数据的情况下  拿第二条数据的开始时间减去第一条数据的开始时间(第二条数据的开始时间其实就是第一条数据的结束时间),的到的就是这一个时间段的天数,存在多条数据的情况就是以此类推,到计算到最后一条数据的时候就不同了,是拿最后一条数据的结束时间减去倒数第二条数据的开始时间,的到的结果就是倒数第二条数据这个时间段的天数。用于显示计算结果的TextBox始终有一个Text是空的,也就是最后一个Text
      

  4.   

    for( i=0;i<n-1 ;i++ )
    a(i+1)-a(i)
      

  5.   

    你为什么不先算出来 在用dataview 绑定呢???