Здесь я вижу, что проблема возникает, и, честно говоря, этот кусок кода немного беспорядок.
switch(int.Parse(string.IsNullOrEmpty(e.Row.Cells[1].Text)?"0":e.Row.Cells[1].Text))
Здесь слишком много всего, что может быть полезным.Во-первых, e.Row.Cells [1] выглядит так, как будто он предоставляет DateTime, поэтому int.Parse - абсолютно неправильная вещь для использования здесь.Основываясь на вашем описании того, что вы хотите, я не понимаю, как это будет достигнуто каким-либо образом.
Вот мой укол:
Image img = (Image)e.Row.FindControl("image1");
DateTime received;
DateTime read;
DateTime.TryParse(e.Row.Cells[1].Text, received); // If exception it will produce DateTime.MinValue
DateTime.TryParse(e.Row.Cells[2].Text, read);
if (received == DateTime.MinValue)
{
img.ImageUrl = "/images/Red.gif";
}
else if (read == DateTime.MinValue)
{
img.ImageUrl = "/images/Amber.gif";
}
else
{
img.ImageUrl = "/images/Green.gif";
}
img.Visible = true;
Используйте операторы if, когда ониуместны.То, что вы пытаетесь сделать, включает в себя даты, поэтому используйте даты.Упростите свои выражения, чтобы сделать их более читабельными.Вам не нужно делать все в одной строке.Выражение, переданное вашему выражению switch, делает слишком много всего за один выстрел.Я не говорю, что это невозможно, но он генерирует много серой области относительно того, откуда происходят любые сгенерированные ошибки.