Link to home
Start Free TrialLog in
Avatar of GY1680
GY1680

asked on

Show Event In Calendar Control

I have a calendar on a page that I would like to shade/color each day that has an event stored in a database.  I have a calendar control and a sqldatasource control on the page.  I currently have a datagrid bound to the calendar control so that when a day is selected if there are any events for that day, they are listed in the datagrid.  I would like to have the particular days highilghted in some fashion on the calendar to show the user which days have appointments.  I have done research on the web and know I should be using the DayRender function on the calendar, but the examples I'm finding are using page data rather than a sqldatasource or other sql data connection.
My schedule:</p>
            <asp:Calendar ID="Calendar1" runat="server" BackColor="White" 
                BorderColor="#3366CC" BorderWidth="1px" CellPadding="1" 
                DayNameFormat="Shortest" Font-Names="Verdana" Font-Size="8pt" 
                ForeColor="#003399" Height="200px" Width="220px">
                <SelectedDayStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
                <SelectorStyle BackColor="#99CCCC" ForeColor="#336666" />
                <WeekendDayStyle BackColor="#CCCCFF" />
                <TodayDayStyle BackColor="#99CCCC" ForeColor="White" />
                <OtherMonthDayStyle ForeColor="#999999" />
                <NextPrevStyle Font-Size="8pt" ForeColor="#CCCCFF" />
                <DayHeaderStyle BackColor="#99CCCC" ForeColor="#336666" Height="1px" />
                <TitleStyle BackColor="#003399" BorderColor="#3366CC" BorderWidth="1px" 
                    Font-Bold="True" Font-Size="10pt" ForeColor="#CCCCFF" Height="25px" />
            </asp:Calendar>
            <br />
            Appointments scheduled for selected day:<br />
            <asp:GridView ID="GridView1" 
                runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
                <Columns>
                    <asp:BoundField DataField="DateScheduled" HeaderText="Date" 
                        SortExpression="Date" />
                    <asp:BoundField DataField="TimeInScheduled" HeaderText="Start Time" 
                        SortExpression="Start Time" />
                    <asp:BoundField DataField="TimeOutScheduled" HeaderText="End Time" 
                        SortExpression="End Time" />
                    <asp:BoundField DataField="Patient" HeaderText="Patient" 
                        SortExpression="Patient" />
                    <asp:BoundField DataField="Description" HeaderText="Description" 
                        SortExpression="Description" />
                    <asp:HyperLinkField HeaderText="Enter Visit Notes" Text="Click Here" NavigateUrl="~/NewEntry.aspx"/>
                </Columns>
            </asp:GridView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
                SelectCommand="SELECT Visits.DateScheduled, Visits.TimeInScheduled, Visits.TimeOutScheduled, Patients.FirstName + ' ' + Patients.MiddleName + ' ' + Patients.LastName as Patient, VisitTypes.Description FROM Agencies INNER JOIN Patients ON Agencies.ID = Patients.AgencyID INNER JOIN Visits ON Patients.ID = Visits.PatientID INNER JOIN VisitTypes ON Visits.VisitTypeID = VisitTypes.ID WHERE (Visits.DateScheduled = @Date)">
                <SelectParameters>
                    <asp:ControlParameter ControlID="Calendar1" DefaultValue="" Name="Date" 
                        PropertyName="SelectedDate" />
                </SelectParameters>
            </asp:SqlDataSource>
 
Database = 
 
Table = Visits
Field = DateScheduled
Format = Date

Open in new window

Avatar of silemone
silemone
Flag of United States of America image

I created an event calendar.  First off, what's complicating your situation is using the grid.  the Calendar itself is a table, so its redundant.  Then instead of binding you should write code in the dayRender to handle this...The only other thing I could see you trying is an if/else statement to see if there is a Datagrid control inside of the DayRender event.  The Bind should occur on each DayRender and should occur first, so maybe you can detect the datagrid and if it has one, then color it...
Avatar of GY1680
GY1680

ASKER

I am attempting to use the calendar itself only to display if an event exists for that day, to indicate if the user should even bother clicking to find out more.  The datagrid is used to display a much more detailed view of the information.

I'm hoping to do something logically like this:

On DayRender
If Calendar1.Date = Sqldatasource.date
cell.color = blue
return
SOLUTION
Avatar of silemone
silemone
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
-->  I am attempting to use the calendar itself only to display if an event exists for that day, to indicate if the user should even bother clicking to find out more.  The datagrid is used to display a much more detailed view of the information......


In order to mark the days, you must use DayRender and in code, mark days...as my flow above suggest, you can then use Calendar onSelectedDate Event to THEN populate the DataGrid dynamically with that days events...
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial