根据另一个Datagridview中单元格的值更改Datagridview中的行颜色

时间:2015-10-15 10:36:41

标签: c# datagridview cell-formatting

我正在使用c#winform sql server

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

第一个名为tblMember

的表格

idMember(PK,int,not null)

memberName(varchar(50),null)

该表与一对多关系相关

第二个名为tblVacations

的表格

idVacation(PK,int,not null)

vacationStart(日期,空)

vacationEnd(日期,空)

idMember_L(FK,int,null)

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

第二个datagridview dgVacation填充相关数据

现在我想要用dg_member明确在今天缺席的vacationStart中的名称(今天落在vacationEndvacationEnd之间)并且如果该成员今天来(今天等于{{ 1}})名称变为绿色

我尝试了代码:

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;
                }
            }
        }

但它给了我一个错误

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

what i want

谢谢

1 个答案:

答案 0 :(得分: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()