2012-04-08 2 views
-1

Я прошел через движения и все еще не могу понять, что это правильно. У меня есть текстовые поля в gridview, которые заполнены из базы данных доступа. Это все значения даты и времени. Во внутреннем коде я пытаюсь выполнить все эти значения, а затем применить условное форматирование. По какой-то неизвестной причине я не могу получить значение из этих текстовых полей в gridview, и когда я это делаю, они воспринимаются приложением как строка, а не datetime. Преобразование бесполезно как одна и та же ошибка: «String не была признана допустимым DateTime». продолжает появляться.C# с Gridview, Access, DateTime и конвертирование

Любые идеи о том, как получить значения из текстового поля gridview, а затем преобразовать их из строки в формат даты и времени?

Вот код до сих пор ...

for (int p = 0; p < rowscount; p++) 
{ 
    var myLabel2 = (TextBox)GridView1.Rows[p].Cells[0].FindControl("Label2"); 
    var myLabel4 = (TextBox)GridView1.Rows[p].Cells[0].FindControl("Label4"); 

    DateTime start = Convert.ToDateTime(myLabel2.Text).Date; 
    DateTime now = DateTime.Now.Date; 
    DateTime end = Convert.ToDateTime(myLabel4.Text).Date; 

    if (now >= start && now <= end) 
    { 
     myLabel2.BackColor = Color.Chartreuse; 
     myLabel4.BackColor = Color.Chartreuse; 
     myLabel7.BackColor = Color.Chartreuse; 
     myLabel9.BackColor = Color.Chartreuse; 
    } 
    else 
    { 
     myLabel2.BackColor = Color.White; 
     myLabel4.BackColor = Color.White; 
     myLabel7.BackColor = Color.White; 
     myLabel9.BackColor = Color.White; 
    } 
} 

Заранее спасибо

+0

Вы можете показать образец 'myLabel2.Text' или' myLabel4.Text', который вы намерены преобразовать? – Marshal

ответ

0

Это выглядит как вопрос формата даты и времени. Ваш GridView конвертирует datetime в строку одним способом, и вы пытаетесь преобразовать его обратно в datetime в другом формате. Вместо того, чтобы попытаться использовать Convert.ToDateTimeDateTime.ParseExact(String, String, IFormatProvider):

CultureInfo provider = CultureInfo.InvariantCulture; 
string format = "dd/MMM/yyyy h:mm tt zzz"; 
DateTime result = DateTime.ParseExact(dateString, format, provider); 

Используйте формат, который относится к делу.

+0

... и если ошибка «String не была признана действительной DateTime» все еще всплывает? – Jason666

+0

Возможно, это вовсе не строка даты. Пройдите код, чтобы узнать. –

+0

Если нет, то какой формат это может быть? Это может быть проблема с населением из базы данных? Выполняя код, не обнаруживается много ... – Jason666

0

Являются ли текстовые поля как в первом столбце GridView1? Для кода:

var myLabel2 = (TextBox)GridView1.Rows[p].Cells[0].FindControl("Label2"); 
var myLabel4 = (TextBox)GridView1.Rows[p].Cells[0].FindControl("Label4"); 

Это означает, что имена ваших текстовых полей являются «LABEL2» и «Label4», и они оба находятся в первой колонке, как вы используете Cells[0] за ними. Вы должны убедиться в этом.

Вы можете добавить точку останова к вышеуказанному коду и отладить его. Вы можете узнать, имеют ли значения myLabel2 и myLabel4.

+0

Да, оба текстовых поля находятся в первом столбце, и оба имеют значения ... строка в текстовых полях «2012/04/03 12:00:00 AM», есть ли способ конвертировать эту строку в формат даты и времени? – Jason666

+0

Да, оба 'Convert.ToDateTime' и' DateTime.Parse' могут конвертировать этот формат строки. Какая строка вызывает ошибку? –

+0

DateTime result = DateTime.ParseExact (dateString, формат, поставщик); Это, кажется, линия, вызывающая проблему. Фактическое значение dateString, похоже, находится в конфликте .... – Jason666

0
DateTime date = DateTime.ParseExact(myLabel2.Text, "dd/MM/yyyy", null); 
+0

«String не была признана действительной DateTime.» .. все еще безрезультатно .... может ли это быть проблемой с фактическим полем базы данных? – Jason666