首页 > 解决方案 > 如何根据所选月份的天数隐藏表格中的列?

问题描述

在我看来,根据选定的月份和一个表,有一个用于过滤器的日期选择器。该表有 32 列,其中 1-32 列是日期。我想问的是,当我选择二月时如何隐藏第 29、30、31 列(因为二月只有到 28 的日期)?,如果我选择四月,第 31 列将消失。下面是我的代码,谢谢。

private AttendecencesViewModel LoadDataAttendence(AttendecencesViewModel model)
{
   queryJoin = db.AttendenceVs.ToList();
   if (model.SearchPayrollMonth != null)
   {
        queryJoin = queryJoin.ToList().Where(x => x.PayrollMonth == model.SearchPayrollMonth);
   }
   foreach (AttendenceV attendenceV in queryJoin)
   { 
       AttendenceViewModel detail = new AttendenceViewModel();
       detail.EmployeeName = attendenceV.EmployeeName;
       detail.PresenceDay01 = attendenceV.PresenceDay01;
       detail.PresenceDay02 = attendenceV.PresenceDay02;
       detail.PresenceDay03 = attendenceV.PresenceDay03;
       attedenceViewModel.AttendenceDetails.Add(detail);
   }
   return attedenceViewModel;
}
public ActionResult Search(AttendecencesViewModel model)
{
   attedenceViewModel = LoadDataAttendence(model);
   return View("Index", attedenceViewModel);
}

看法

 @Html.TextBoxFor(model => model.SearchMonth, new { @class = "form-control" })
<table class="table">
    <tr>
      <th>Name</th>
      <th>1</th>
      <th>2</th>
      <th>3</th> //I only made it until the 3rd,
      .
      .
      <th>31</th>
    </tr>
     @foreach (MyExercise.Data.ViewModel.AttendenceViewModel item in Model.AttendenceDetails)
     { 
        <tr>
            <td>@Html.DisplayFor(modelItem => item.EmployeeName)</td>
            <td>@Html.DisplayFor(modelItem => item.PresenceDay01)</td>
            <td>@Html.DisplayFor(modelItem => item.PresenceDay02)</td>
            <td>@Html.DisplayFor(modelItem => item.PresenceDay03)</td>
             .
             .
            <td>@Html.DisplayFor(modelItem => item.PresenceDay31)</td>
        </tr>
     }
</table>

标签: javascriptc#asp.net-mvc

解决方案


DateTime.DaysInMonth(<year>, <month>)用于获取指定年/月的天数。使用此值,您可以隐藏/显示额外的列:

@foreach (MyExercise.Data.ViewModel.AttendenceViewModel item in Model.AttendenceDetails)
{
    <tr>
        <td>@Html.DisplayFor(modelItem => item.EmployeeName)</td>
        <td>@Html.DisplayFor(modelItem => item.PresenceDay01)</td>
        <td>@Html.DisplayFor(modelItem => item.PresenceDay02)</td>
        @* ... *@
        <td>@Html.DisplayFor(modelItem => item.PresenceDay28)</td>
        @if (daysInMonth >= 29)
        {
            <td>@Html.DisplayFor(modelItem => item.PresenceDay29)</td>  
        }

        @if (daysInMonth >= 29)
        {
            <td>@Html.DisplayFor(modelItem => item.PresenceDay28)</td>
        }

        @* until 31...use the same idea in thead *@
    </tr>
}

推荐阅读