我想在gridview中表示工作日

时间:2012-08-28 15:14:41

标签: asp.net datetime gridview weekday

<asp:GridView ID="grid1" runat="server" AutoGenerateColumns="False">

   <Columns>
      <asp:BoundField DataField='id' HeaderText="Id" Visible="False" />
      <asp:BoundField DataField='Name' Visible="True"  HeaderText="Full Name"/>


     <asp:BoundField  HeaderText="Monday"  />   
     <asp:BoundField  HeaderText="Tuesday" />   
     <asp:BoundField  HeaderText="Wednesday"  />   
     <asp:BoundField  HeaderText="Thursday"  />   
      <asp:BoundField HeaderText="Friday"  />              
  </Columns>

</asp:GridView>

<asp:TextBox ID="tbFirstDate" runat="server"></asp:TextBox>

//在作为此grid1源的DataTable中,我有一个列'date',但在Grid中我需要显示该日期的工作日(例如,2012年8月20日星期一)。我还有一个TextBox(tbFirstDate)定义哪一天是星期一,所以使用该信息我需要计算其余的工作日,日期格式是yyyy-mm-dd

我使用PostreSQL,这是SQL查询:

SELECT  *  FROM Table1
WHERE  id1=212 AND date BETWEEN '20.08.2012' AND  '24.08.2012'
ORDER BY date

enter image description here

现在这个结果我想像这样在网格中表示

enter image description here

1 个答案:

答案 0 :(得分:1)

所以基本上你的实际问题是如何将DateTime's DayOfWeek值更改为指定的第一天的指定距离?

然后你可以使用这个方法:

public static int Weekday(DateTime dt, DayOfWeek startOfWeek)
{
    return (dt.DayOfWeek - startOfWeek + 7) % 7;
}

例如,假设用户今天输入以指定Tuesday是本周的开头:

DateTime value = new DateTime(2012, 8, 20);
DayOfWeek weekday = (DayOfWeek)Weekday(value, DateTime.Now.DayOfWeek);
Console.Write("normally:{0} changed to:{1}", value.DayOfWeek, weekday); 

演示:http://ideone.com/Zk99b

如果确实如此,您只需在RowDataBound的{​​{1}}中使用此方法,即可根据{GridView中的指定日期手动设置标签文本1}}和GridViewRow的TemplateField中的tbFirstDate值。使用date获取对Label的引用。