A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hongiqnglik 中级黑马   /  2013-7-31 23:42  /  1712 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

for (int i = 0; i < dr.Length; i++)
  {
  string UserAccount = dr[i]["员工工号"].ToString();
  string StartDate = dr[i]["开始日期"].ToString();
  string StartTime = dr[i]["开始时间"].ToString();
  string EndDate = dr[i]["结束日期"].ToString();
  string EndTime = dr[i]["结束时间"].ToString();
  decimal DayQty = 0;
  if (string.IsNullOrEmpty(StartDate) || string.IsNullOrEmpty(StartTime) || string.IsNullOrEmpty(EndDate) || string.IsNullOrEmpty(EndTime))
  {
  DayQty = 0;
  }
  else
  {
  DayQty = decimal.Parse(GetLeaveDays(StartDate, StartTime, EndDate, EndTime, LeaveTypeModel.AnnualLeave)); //decimal.Parse(dr[i]["天数"].ToString());
  }

根据Useraccount记录下DayQty值(相同UserAccount相加),但是每次的Useraccount都不一致 有什么好的解决方法.

2 个回复

倒序浏览
本帖最后由 黑骏马 于 2013-8-1 10:23 编辑

[ 本帖最后由 黑骏马 于 2013-8-1 10:20 编辑 ]\n\n看你的代码觉得好奇怪,for循环的结果是一次次覆盖DayQty值,最后只是得到最后一个员工的DayQty。
                                 数组的索引,只能是从0开始的数字,你怎么还写进字符串了?
最后的问题也没看懂,是要求DayQty的总和?还是要记录每一个员工的DayQty?还是别的什么意思?我按我的理解来回答:
如果要求总和,if和else里面的 = 应该换成 +=
  1. if (string.IsNullOrEmpty(StartDate) || string.IsNullOrEmpty(StartTime) || string.IsNullOrEmpty(EndDate) || string.IsNullOrEmpty(EndTime))
  2.   {
  3.   DayQty += 0;
  4.   }
  5.   else
  6.   {
  7.   DayQty += decimal.Parse(GetLeaveDays(StartDate, StartTime, EndDate, EndTime, LeaveTypeModel.AnnualLeave)); //decimal.Parse(dr[i]["天数"].ToString());
  8.   }
复制代码
如果要记录每一个员工的DayQty,应该把DayQty声明为一个数组,但是要保持跟员工工号的对应,所以应该作为一个元素加进dr[][]的第二维里面。
  1.     if (string.IsNullOrEmpty(StartDate) || string.IsNullOrEmpty(StartTime) || string.IsNullOrEmpty(EndDate) || string.IsNullOrEmpty(EndTime))
  2.     {
  3.         dr[i][dayQty] = 0;
  4.     }
  5.     else
  6.     {
  7.         dr[i][dayQty] = decimal.Parse(GetLeaveDays(StartDate, StartTime, EndDate, EndTime, LeaveTypeModel.AnnualLeave)); //decimal.Parse(dr[i]["天数"].ToString());
  8.     }
复制代码
相同UserAccount相加,要实现这一点需要每次循环做一次dr【i】["员工工号"]的比较,(这似乎是你想问的问题?)
(吐槽下编辑器,输入个[ 'i' ] 后面内容竟然全部变斜体了,编辑器自动补[/'i']?)
  1.     for (int j = 0; j < i; j++)
  2.         {
  3.                 if (dr[j]["员工工号"] == dr[i]["员工工号"]  )
  4.             {
  5.                     dr[i][dayQty]+=dr[j][dayQty];
  6.                     dr[j][dayQty]=dr[i][dayQty]; //保持两条数据的一致
  7.             }
  8.         }
复制代码
如果存在两个以上的相同UserAccount,为保持数据一致,上面的代码还得修改,一时想不到什么好办法解决。

本来想用数组+结构来改造你的dr数组,查了半天资料发现似乎是做不到的,可能需要更高级的知识。
回复 使用道具 举报
向同学请教后搞明白了把结构装进数组的方法,原来很简单:
  1.         public struct DayQty
  2.         {
  3.             public string userAccont;
  4.             //public DateTime startDate;
  5.             public DateTime startTime;
  6.             //public DateTime endDate;
  7.             public DateTime endTime;
  8.             public decimal dayQty;
  9.         }
  10.         static void Main()
  11.         {
  12.             DayQty[] dr = new DayQty[10];
  13.             //可以写成方法AddData()
  14.             dr[0].userAccont = "101";
  15.             dr[0].startTime = new DateTime(2013, 7, 1, 8, 30, 0);
  16.             dr[0].endTime = new DateTime(2013, 7, 1, 18, 0, 0);
  17.             //dr[0].dayQty = 0.0m;//不赋值即默认为0

  18.             dr[1].userAccont = "102";
  19.             dr[1].startTime = new DateTime(2013, 7, 1, 10, 0, 0);
  20.             dr[1].endTime = new DateTime(2013, 7, 1, 18, 0, 0);
  21.             //dr[1].dayQty = 0.0m;

  22.             Console.WriteLine(dr[0].startTime);
  23.             Console.WriteLine(dr[0].dayQty);
  24.             Console.ReadKey();
  25.         }
复制代码
估计楼主的程序是用数据库的,我是当成控制台程序思考的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马