Solved

Add hyperlink to day cell of calendar control

Posted on 2007-11-21
3
1,141 Views
Last Modified: 2008-02-01
Hello, I'm trying to create a calender control that gets date and title from the events table in an access database. Then display the title for a given date in a linkbutton or hyperlink so that when the link is displayed and then clicked by the user I can then grab the corresponding event data and populate a datalist. Using the code below that I modified from http://msdn2.microsoft.com/en-us/library/ms228044(VS.80).aspx I was able to display the dates that have an event. Now I need help displaying the title in the linkbutton. How can this be accomplished? Any help would be great!

Here is the code that I'm working with:

    Protected dsEvents As DataSet

    Protected Sub FillEventsDataset()
        Dim firstDate As New DateTime(calHREvents.VisibleDate.Year, _
             calHREvents.VisibleDate.Month, 1)
        Dim lastDate As DateTime = GetFirstDayOfNextMonth()
        dsEvents = GetCurrentMonthData(firstDate, lastDate)
    End Sub

    Protected Function GetFirstDayOfNextMonth() As DateTime
        Dim monthNumber, yearNumber As Integer
        If calHREvents.VisibleDate.Month = 12 Then
            monthNumber = 1
            yearNumber = calHREvents.VisibleDate.Year + 1
        Else
            monthNumber = calHREvents.VisibleDate.Month + 1
            yearNumber = calHREvents.VisibleDate.Year
        End If
        Dim lastDate As New DateTime(yearNumber, monthNumber, 1)
        Return lastDate
    End Function

    Protected Sub calHREvents_VisibleMonthChanged(ByVal sender As Object, _
            ByVal e As System.Web.UI.WebControls.MonthChangedEventArgs) _
            Handles calHREvents.VisibleMonthChanged
        FillEventsDataset()
    End Sub

    Function GetCurrentMonthData(ByVal firstDate As DateTime, _
            ByVal lastDate As DateTime) As DataSet
        Dim dsMonth As New DataSet


        'create connection to HRData database
        Dim objConn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; data source=" & Server.MapPath("~/App_Data/HRData.mdb"))
        Dim connString As String = objConn.ConnectionString
        Dim dbConnection As New OleDbConnection(connString)
        Dim query As String
        query = "SELECT Date, Title FROM Events " & _
            " WHERE Date >= @firstDate AND Date < @lastDate"
        Dim dbCommand As New OleDbCommand(query, dbConnection)
        dbCommand.Parameters.Add(New OleDbParameter("@firstDate", firstDate))
        dbCommand.Parameters.Add(New OleDbParameter("@lastDate", lastDate))

        Dim oleDataAdapter As New OleDbDataAdapter(dbCommand)
        Try
            oleDataAdapter.Fill(dsMonth)
        Catch
        End Try
        Return dsMonth
    End Function

    Protected Sub calHREvents_DayRender(ByVal sender As Object, _
            ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) _
            Handles calHREvents.DayRender
        Dim nextDate As DateTime
        If Not dsEvents Is Nothing Then
            For Each dr As DataRow In dsEvents.Tables(0).Rows
                nextDate = CType(dr("Date"), DateTime)
                If nextDate = e.Day.Date Then
                    e.Cell.BackColor = System.Drawing.Color.Pink
                End If
            Next
        End If
    End Sub


Here is the markup:
<asp:Calendar ID="calHREvents" Width="725px" Height="500px" runat="server" BackColor="White" BorderColor="Black" DayNameFormat="Shortest" Font-Names="Times New Roman" Font-Size="10pt" ForeColor="Black" NextPrevFormat="FullMonth" TitleFormat="Month">
                <SelectedDayStyle BackColor="#CC3333" ForeColor="White" />
                <TodayDayStyle BackColor="#CCCC99" />
                <SelectorStyle BackColor="#CCCCCC" Font-Bold="True" Font-Names="Verdana" Font-Size="8pt"
                    ForeColor="#333333" Width="1%" />
                <DayStyle Width="14%" />
                <OtherMonthDayStyle ForeColor="#999999" />
                <NextPrevStyle Font-Size="8pt" ForeColor="White" />
                <DayHeaderStyle BackColor="#CCCCCC" Font-Bold="True" Font-Size="7pt" ForeColor="#333333"
                    Height="10pt" />
                <TitleStyle BackColor="Black" Font-Bold="True" Font-Size="12pt" ForeColor="White"
                    Height="10pt" />
            </asp:Calendar>
0
Comment
Question by:gogetsome
  • 2
3 Comments
 
LVL 9

Expert Comment

by:codeclay
Comment Utility
If you want to add a link in your calendar day columns , do it like this in the calHREvents_DayRender event
 Dim hl As New HyperLink
        hl.NavigateUrl = "#" 'Some Link here
        hl.Text = "Some Text from ur Dataset"
        e.Cell.Controls.Add(hl)
0
 

Author Comment

by:gogetsome
Comment Utility
That works! very cool.
The points are yours. If you have time can you answer this? The link with my title does show up and I'm able to put it in a session and retrieve it with no problem. BUT, the link that we added is right next to the day number. Is there a way to issue a line feed or a space or something after the day number for each cell that has one of these links added?
0
 
LVL 9

Accepted Solution

by:
codeclay earned 500 total points
Comment Utility
HEre you go
      Dim hl As New HyperLink
        Dim lc As New LiteralControl
        lc.Text = "</BR>"
        hl.NavigateUrl = "#" 'Some Link here
        hl.Text = "Some Text from ur Dataset"
        e.Cell.Controls.Add(lc)
        e.Cell.Controls.Add(hl)
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Sometimes in DotNetNuke module development you want to swap controls within the same module definition.  In doing this DNN (somewhat annoyingly) swaps the Skin and Container definitions to the default admin selections.  To get around this you need t…
Problem Hi all,    While many today have fast Internet connection, there are many still who do not, or are connecting through devices with a slower connect, so light web pages and fast load times are still popular.    If your ASP.NET page …
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now