閲覧総計:4786  (本日:1  昨日:0)

 カレンダ コントロールの祝日・会社休日をピンクで表示する方法を確認した。

 DBに祝日・会社休日情報を用意し、カレンダ表示に反映させる。
 土日は、カレンダ コントロールのプロパティ設定:WeekendDayStyleのBackColorを
LightPinkに設定する事で対応する。  10/08/10

【稼働画面】

祝日会社休日カレンダ表示.jpg
Access祝日会社休日データ.jpg

※会社休日夏休み:8/9(月)〜8/13(金)
※9/23秋分の日は会社出勤日

開発環境:VWD2008 + Access2003 + SQL Server2008
サーバ:ASP.NET3.5 + Access2003

【HolidayRender_ads.aspx】

<%@ Page Language="VB" %>
<%@ Import Namespace = "System.Data" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    Protected Sub cal_dayrender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs)
        ads.SelectParameters.Clear()
        ads.SelectParameters.Add("CalDate", e.Day.Date.ToString("yyyy/MM/dd"))
        
        Dim reader As IDataReader = ads.Select(DataSourceSelectArguments.Empty)
        ' 日付セル(e.Call)毎に繰り返し
        Do While reader.Read()
            '祝日・会社休日をLightPinkに
            e.Cell.BackColor = Drawing.Color.LightPink
        Loop
    End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        カレンダの祝日・会社休日ピンク表示 10/08/10<br />
        <br />
        <asp:AccessDataSource ID="ads" runat="server" 
            DataFile="~/App_Data/AccessDB.mdb" DataSourceMode="DataReader" 
            SelectCommand="SELECT [ID], [Holiday] FROM [CompanyHolidays] WHERE [Holiday] = @CalDate">
        </asp:AccessDataSource>
        <asp:Calendar id="cal" runat="server"
            DayHeaderStyle-BackColor="#FFCC66"
            onDayRender="cal_DayRender" ShowGridLines="true"
            BorderWidth="3" BorderColor="Black" Font-Name="Verdana"
            Font-Size="10px" TitleStyle-BackColor="#FFCC66"
            TitleStyle-Font-Size="12px" TitleStyle-Font-Bold="true"
            DayStyle-VerticalAlign="Top" DayStyle-Height="50px"
            DayStyle-Width="14%" SelectedDayStyle-BackColor="Navy"
            ShowNextPrev="True" NextPrevFormat="FullMonth" Width="504px"> 
            <SelectedDayStyle BackColor="#CC5533" />
            <WeekendDayStyle BackColor="LightPink" />
            <DayStyle VerticalAlign="Top" Height="50px" Width="14%"></DayStyle>
            <DayHeaderStyle BackColor="#FFCC66"></DayHeaderStyle>
            <TitleStyle BackColor="#FFCC66" Font-Bold="True" Font-Size="12px"></TitleStyle>
        </asp:Calendar>
        <br />
    
    </div>
    </form>
</body>
</html>

【参考にしたページ】
   なし


【HolidayRender_direct.aspx】

<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data.Common" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    'MS-AccessDBのConnectionString
    Dim MyDbConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\AccessDB.mdb;Persist Security Info=True"
    'MS-AccessDBのProviderName
    Dim MyDbProviderName As String = "System.Data.OleDb"
    
    ' カレンダのそれぞれの日付セルをレンダリングするタイミングで実行
    Sub cal_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs)
        
        Dim setting As ConnectionStringSettings = _
          ConfigurationManager.ConnectionStrings(MyDbConnectionString)
        Dim factory As DbProviderFactory = _
          DbProviderFactories.GetFactory(MyDbProviderName)
        
        Using db As DbConnection = factory.CreateConnection()
            db.ConnectionString = MyDbConnectionString
            
            ' 出力する日付セルに対応するスケジュール情報を抽出
            Dim comm As DbCommand = factory.CreateCommand()
            comm.CommandText = "SELECT [ID],[Holiday] FROM [CompanyHolidays] WHERE [Holiday]=@CalDate"
            comm.Connection = db
            
            Dim param As DbParameter = factory.CreateParameter()
            param.ParameterName = "@CalDate"
            param.Value = e.Day.Date.ToString("yyyy/MM/dd")
            comm.Parameters.Add(param)
            
            db.Open()
            Dim reader As DbDataReader = comm.ExecuteReader()

            ' 日付セル(e.Call)毎に繰り返し
            Do While reader.Read()
                '祝日・会社休日をLightPinkに
                e.Cell.BackColor = Drawing.Color.LightPink
            Loop
        End Using
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        カレンダの祝日・会社休日をピンク表示(DB直接アクセス法)  10/08/10<br />
        <br />
        <asp:Calendar id="cal" runat="server"
            DayHeaderStyle-BackColor="#FFCC66"
            onDayRender="cal_DayRender" ShowGridLines="true"
            BorderWidth="3" BorderColor="Black" Font-Name="Verdana"
            Font-Size="10px" TitleStyle-BackColor="#FFCC66"
            TitleStyle-Font-Size="12px" TitleStyle-Font-Bold="true"
            DayStyle-VerticalAlign="Top" DayStyle-Height="50px"
            DayStyle-Width="14%" SelectedDayStyle-BackColor="Navy"
            ShowNextPrev="True" NextPrevFormat="FullMonth" Width="504px"> 
            <SelectedDayStyle BackColor="#CC5533" />
            <WeekendDayStyle BackColor="LightPink" />
            <DayStyle VerticalAlign="Top" Height="50px" Width="14%"></DayStyle>
            <DayHeaderStyle BackColor="#FFCC66"></DayHeaderStyle>
            <TitleStyle BackColor="#FFCC66" Font-Bold="True" Font-Size="12px"></TitleStyle>
        </asp:Calendar>
          <br />
    
    </div>
    </form>
</body>
</html>

【参考にしたページ】
   なし



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS