I'd like to display message in alertbox based on how many days left till the deadline, say if there is one day left, the alertbox comes out and say "One day left of your renewal date!". I use the following code
if ((RenewalDate.Value - DateTime.Now).TotalDays == 5)
MessageBox.Show("Your deadline is within 5 days");
else if ((RenewalDate.Value - DateTime.Now).TotalDays == 4)
MessageBox.Show("Your deadline is 4 days left");
else if ((RenewalDate.Value - DateTime.Now).TotalDays == 3)
MessageBox.Show("Your deadline is 3 days left");
else if ((RenewalDate.Value - DateTime.Now).TotalDays == 2)
MessageBox.Show("Your deadline is 2 days left");
else if ((RenewalDate.Value - DateTime.Now).TotalDays == 1)
MessageBox.Show("Your deadline is 1 days left");
But it does not work. I have no idea why. Any ideas? Thanks in advance. My code as follows:
private int _OrganisationID = 1;
private DateTime? _RenewalDate;
public event PropertyChangedEventHandler PropertyChanged;
[Required(ErrorMessage = "OrganisationID is required.")]
public int OrganisationID
{
get { return _OrganisationID; }
set
{
if (_OrganisationID == value)
return;
_OrganisationID = value;
PropertyChanged(this, new PropertyChangedEventArgs("OrganisationID"));
}
}
[Required(ErrorMessage = "RenewalDate is a required field.")]
public DateTime? RenewalDate
{
get { return _RenewalDate; }
set
{
_RenewalDate = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("RenewalDate"));
}
}
}
DispatcherTimer timer = new DispatcherTimer();
// DateTime myDeadLine = new DateTime();
public void InitTimer()
{
// Checks every minute
timer.Interval = new TimeSpan(0, 1, 0);
timer.Tick += timer_Tick;
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
//if (( RenewalDate.Value - DateTime.Now).TotalDays <= 1)
// MessageBox.Show("Your Alert Message");
}
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.Source is TabControl)
{
if (ClientDeadLines.IsSelected)
{
using (var context = new ProActiveDBEntities())
{
var org = context.Organisations.Where(o => o.OrganisationID == this.OrganisationID).FirstOrDefault();
if (org != null)
{
RenewalDate = org.RenewalDate;
if ((RenewalDate.Value - DateTime.Now).TotalDays <= 2)
MessageBox.Show("Your Alert Message");
}
else
{
MessageBox.Show("Unable to retrieve data, please set up organsiation first.");
}
}
}
}
}
Did you even try to debug this problem? Put a break point on the first line:
if ((RenewalDate.Value - DateTime.Now).TotalDays == 5)
What does ((RenewalDate.Value - DateTime.Now).TotalDays
equal???
((RenewalDate.Value - DateTime.Now).TotalDays
will probably never equal 5
because TotalDays
is a double
. Try using the Days
property instead.
UPDATE >>>
Also, did you know that you could approximately refactor your code to the following?:
TimeSpan daysRemaining = RenewalDate.Value - DateTime.Now;
if (daysRemaining.Days <= 5) MessageBox.Show(string.Format("Your deadline is {0} days
away", daysRemaining.Days));