0

我正在使用 c# winform sql server

在我的数据库中,我尝试管理我的小公司的员工假期,所以我创建了两个表

第一个表称为tblMember

idMember(PK,整数,不为空)

memberName(varchar(50),空)

该表以一对多关系关联到

第二个表称为tblVacations

idVacation(PK,整数,不为空)

vacationStart(日期,空)

vacationEnd(日期,空)

idMember_L(FK,整数,空)

然后我创建了一个带有两个 datagridview 的表单,第一个调用dg_member填充它的数据(来自 tblMember 的名称)抛出一个存储过程

第二个datagridviewdgVacation填充相关数据

现在我想把今天缺席的人的名字涂成红色dg_member(今天介于vacationStart和之间vacationEnd),如果成员今天来(今天相等vacationEnd),名字变成绿色

我尝试了代码:

private void dgMember_Grade_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            foreach (DataGridViewRow Myrow in dgMember_Grade.Rows)
            {
                var cvStart = dgVacation.Rows[0].Cells[1].Value;
                var cvEnd = dgVacation.Rows[0].Cells[2].Value;

                if (cvStart == null || cvStart == DBNull.Value)
                    continue;

                DateTime startDate = Convert.ToDateTime(cvStart);
                DateTime endDate = Convert.ToDateTime(cvEnd);

                if (startDate < DateTime.Now && endDate > DateTime.Now)
                {
                    Myrow.DefaultCellStyle.BackColor = Color.Red;
                }
                else if (endDate == DateTime.Now)
                {
                    Myrow.DefaultCellStyle.BackColor = Color.Green;
                }
            }
        }

但它给了我一个错误

指数超出范围。必须是非负数且小于集合的大小。

我想要的是

谢谢你

4

1 回答 1

0
declare @tmw Date  = DATEADD(day, 1,getdate())
select


m.MemberName
, case when t.idMember_L is null then 'False' else 'True' end as OnHoliday
, case when (select count (tm.idMember_L) from tblVacations tm where
    m.idMember = tm.idMember_L and
     t.vacationStart <= @tmw and t.vacationEnd >= @tmw ) > 0
     then 'False' else 'True' end as OnHolidayTomorrow
 from tblMember m
     left outer join tblVacations t
     on m.idMember = t.idMember_L and
     t.vacationStart <= getdate() and t.vacationEnd >= getdate()
于 2016-05-01T12:32:21.500 回答