我正在使用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
中的名称(今天落在vacationEnd
和vacationEnd
之间)并且如果该成员今天来(今天等于{{ 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;
}
}
}
但它给了我一个错误
指数超出范围。必须是非负数且小于集合的大小。
谢谢
答案 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()