using c# to manipulate the look of the calendar object

Hi,

I am trying to get a calendar to display a different background for dates that have already passed.
I'm trying to use the dayrendered function,  getting the datetimenow and seeing if the date in the calendar cell is lesser than this date and if it is applying a different background colour to it.

My attempted code is as follows but I get the error:

CS0019: Operator '>' cannot be applied to operands of type 'int' and 'string'  

for the line : if (dblDay > e.Cell.Text)

So can I not do the comparing of the e.cell.text and todays day in this way or have i defined one of the variables incorrectly?

Many Thanks

protected void Page_Load(object sender, EventArgs e)
    {
        hidden.Visible = false;
 
        if (!IsPostBack)
        {
            OpenConnection();
 
            SqlCommand command = new SqlCommand("exec usp_GetValidMonths", conn);
 
            SqlDataReader reader = command.ExecuteReader();
 
            ArrayList yearList = new ArrayList();
 
            while (reader.Read())
            {
                string[] monthYear = SplitMonthYear(reader["month"].ToString());
 
                if (!yearList.Contains(monthYear[1]))
                    yearList.Add(monthYear[1]);
            }
 
            yearList.Sort();
 
            for (int i = 0; i < yearList.Count; i++)
            {
                ListItem item1 = new ListItem();
                item1.Text = (string)"20" + yearList[i];
                item1.Value = (string)yearList[i];
                year.Items.Add(item1);
            }
 
 
            CloseConnection();
        }
 
        if (!IsPostBack)
        {
            DateTimeFormatInfo dfi = new DateTimeFormatInfo();
            dfi.MonthDayPattern = "dd MMMM yy";
 
            DateTime now = DateTime.Now;
 
            string dateNow = now.ToString("m", dfi);
 
            string strDay = dateNow.Split(' ')[0];
            string strMonth = dateNow.Split(' ')[1];
            string strYear = dateNow.Split(' ')[2];
 
            string dateID = strMonth + " " + strYear;
            string todayDate = strDay;
 
            DisplayMonth(dateID , todayDate);
 
            dateDrop.Text = strDay;
            monthdrop.Text = strMonth;
            year.Text = strYear;
 
            DateTime datenowforcalendar = DateTime.Parse(dateNow);
 
            Calendar1.SelectedDate = datenowforcalendar;
            Calendar1.VisibleDate = datenowforcalendar;
 
        }
    }
 
 
 
  private void calEvents_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
    {
        DateTimeFormatInfo dformat = new DateTimeFormatInfo();
        dformat.MonthDayPattern = "dd MMMM yy";
 
        DateTime datetoday = DateTime.Now;
 
        string todaysdate = datetoday.ToString("m", dformat);
 
        string strgDay = todaysdate.Split(' ')[0];
 
        int dblDay = Int32.Parse(strgDay);
 
        int celltext = Int32.Parse(e.Cell.Text);
 
        Style style = new Style();
 
        if (dblDay > e.Cell.Text)
        {
            style.BackColor = System.Drawing.ColorTranslator.FromHtml("#666666");
 
        }
 
    }

Open in new window

CharlieDevAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Jaime OlivaresSoftware ArchitectCommented:
you should convert to integer before comparing a text:

 int cellvalue;
 if (int.TryParse(e.Cell.Text, out cellvalue) && dblDay > cellvalue)
{
    // etc
}
0
CharlieDevAuthor Commented:
I think that is working, but I'm not getting any background colour change

Can you see what might be wrong with my code :

 style.BackColor = System.Drawing.ColorTranslator.FromHtml("#666666");


I did just pinch it from an example i found on here
0
Anurag ThakurTechnical ManagerCommented:
because you have declared a style but you have never applied it to the day cell
do it something like this
e.Cell.BackColor = System.Drawing.Color.Wheat;
or
e.Cell.BackColor = System.Drawing.ColorTranslator.FromHtml("#666666");
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

CharlieDevAuthor Commented:
Thanks, I'm not managing to get it to work. I am wondering if I am not calling the function.
Should the private void calEvents_DayRender just automatically run do you know??
Cheers
0
Anurag ThakurTechnical ManagerCommented:
the event should be fired and the function should be called when a day is being rendered in the calendar control.
put a break point inside the day render event and see if the break point is being hit or not
also please confirm that your calendar control has registered to the dayrender event
0
CharlieDevAuthor Commented:
It seems that the dayrender event is not being executed. I am unsure how to tell with a breakpoint, I inserted one into the third line from the bottom of the dayrender event and then hovered over some of the above variables and they havent been filled, also i put a response.write at the very begining and this has not been displayed on the browser display aspx page.
I am now lost as to how to see if the calendar control has registered to the dayrender event.

Thanks for the help :)
0
Anurag ThakurTechnical ManagerCommented:
in your asp.net code do you have OnDayRender="calEvents_DayRender"
0
CharlieDevAuthor Commented:
I didnt have that reference in the asp calendar,ops.
I've put it in and i get this error:

CS0122: 'calendar_fixtcalendar.calEvents_DayRender(object, System.Web.UI.WebControls.DayRenderEventArgs)' is inaccessible due to its protection level

code line:   <asp:Calendar id="Calendar1"



which is from my aspx page code below

What does that mean?
Thank You
 <asp:Calendar id="Calendar1" 
                     BorderStyle="Double" 
                     BorderWidth="4px" 
                     BorderColor="green" 
                     DayStyle-BorderStyle="Solid" 
                     DayStyle-BorderWidth="1px"
                     OnSelectionChanged="Date_Selected"
                     OnDayRender="calEvents_DayRender"
                     width="429px"
                     height="280px"
                     Font-Name="Verdana" 
                     Font-Size="16px"
                     padding-left="5px"
                     NextPrevFormat="ShortMonth"
                     border-style="none"
                     text-decoration="none"
                     runat="server">
                   <TodayDayStyle />
                   <DayHeaderStyle Font-Bold="True"/>
                   <OtherMonthDayStyle ForeColor="gray"/>
                   <TitleStyle BackColor="#ffffff"
                               ForeColor="#000"
                               Font-Bold="True"/>
 
                   <SelectedDayStyle BackColor="#336633"
                                     Font-Bold="True"
                                     />
                   <NextPrevStyle ForeColor="#000"
                                  Font-Size="12px"/>
                   <SelectorStyle BackColor="#336633" 
                                  ForeColor="navy"
                                  Font-Size="9px"/>
                </asp:Calendar>
    <asp:Label ID="Label1" runat="server" ></asp:Label>
                    </div>

Open in new window

0
Anurag ThakurTechnical ManagerCommented:
make your event handler protected
protected  void calEvents_DayRender
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
CharlieDevAuthor Commented:
Thanks, its running that code now
0
CharlieDevAuthor Commented:
Problem solved, for anyone that might want the code below is the working c# code
protected void calEvents_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
    {
        DateTimeFormatInfo dformat = new DateTimeFormatInfo();
        dformat.MonthDayPattern = "dd M";
 
        DateTime datetoday = DateTime.Now;
 
        string todaysdate = datetoday.ToString("m", dformat);
 
        string strgDay = todaysdate.Split(' ')[0];
        string strgMonth = todaysdate.Split(' ')[1];
 
        int dblDay = Int32.Parse(strgDay);
        int dblMonth = Int32.Parse(strgMonth);
 
        int celltext = Int32.Parse(e.Day.DayNumberText);
        int cellMonth = e.Day.Date.Month;
 
        
        if ((dblDay > celltext && dblMonth == cellMonth) || dblMonth > cellMonth)
        {
 
            e.Cell.BackColor = System.Drawing.ColorTranslator.FromHtml("#eeeeee");
            e.Cell.ForeColor = System.Drawing.ColorTranslator.FromHtml("#999999");
        }
 
    }

Open in new window

0
CharlieDevAuthor Commented:
Thanks again for your time, help and knowledge
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C#

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.