2013-03-14 2 views
-3

Я пытаюсь написать простое приложение GUI, которое будет загружать данные клиента из класса Customer при нажатии кнопки retrieve. Эти данные затем сохраняются в объекте Customer при нажатии кнопки сохранения.C#: Необработанные исключения при преобразовании из String в DateTime

я нашел через тестирование, что мои ясные и извлечения кнопки работают, как и ожидалось, но я получаю следующее сообщение об ошибке при нажатии на кнопку сохранения:

необработанное исключение произошло в вашем приложении. Если вы нажмете «Продолжить», приложение проигнорирует эту ошибку и попытается продолжить. Если вы нажмете «Выход», приложение немедленно закроется.

Строка не была признана действительной DateTime. Существует неизвестное слово, начинающееся с индекса 4.

Я наклеил свой код ниже. Буду признателен за любые разъяснения, которые вы могли бы предоставить. Заранее спасибо!

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace simple_GUI 
{ 

    public partial class Form1 : Form 
    { 

     Customer myCustomer = new Customer(); //Declare an instance of the customer class within my Windows form 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void saveButton_Click(object sender, EventArgs e) 
     { 
      myCustomer.Id = Convert.ToInt32(customerIDTextBox.Text); //How to handle exceptions within my conversions? 
      myCustomer.Name = fullNameTextBox.Text; 
      myCustomer.Address = addressTextBox.Text; 
      myCustomer.Email = emailTextBox.Text; 
      myCustomer.Phone = Convert.ToDouble(phoneNumberTextBox.Text); 
      myCustomer.AddDate = Convert.ToDateTime(addressTextBox.Text); 
      myCustomer.TotalTransactions = Convert.ToInt32(totalTransactionsTextBox.Text); 


     } 

     private void retrieveButton_Click(object sender, EventArgs e) 
     { 
      customerIDTextBox.Text = Convert.ToString(myCustomer.Id); 
      fullNameTextBox.Text = myCustomer.Name; 
      addressTextBox.Text = myCustomer.Address; 
      emailTextBox.Text = myCustomer.Email; 
      phoneNumberTextBox.Text = Convert.ToString(myCustomer.Phone); 
      addDateTextBox.Text = Convert.ToString(myCustomer.AddDate); 
      totalTransactionsTextBox.Text = Convert.ToString(myCustomer.TotalTransactions); 

     } 

     private void clearButton_Click(object sender, EventArgs e) 
     { 
      customerIDTextBox.Text = ""; 
      fullNameTextBox.Text = ""; 
      addressTextBox.Text = ""; 
      emailTextBox.Text = ""; 
      phoneNumberTextBox.Text = ""; 
      addDateTextBox.Text = ""; 
      totalTransactionsTextBox.Text = Convert.ToString(""); 

     } 
    } 
} 
+1

Что такое текст addressTextBox (может быть, это ключ: преобразовать адресную строку в datetime)? Ошибка очень ясна: строка не была признана действительной DateTime – prime23

+1

И я предлагаю вам использовать элемент управления DateTimePicker, чтобы ввести дату ввода пользователя, а не текстовое поле – prime23

+0

, какой формат вы используете для своего поля даты? – ecampver

ответ

0

Вы можете проверить Ифите можно преобразовать, прежде чем установить значение преобразование непосредственно, используя TryParse() метод типов, вы могли бы принять правильное преобразование, попробовать что-то вроде этого

private void saveButton_Click(object sender, EventArgs e) 
{ 
    // check if the Id is a integer 
    int convertedId; 
    if (!int.TryParse(customerIDTextBox.Text, out convertedId)) 
    { 
     MessageBox.Show("The ID is not a integer value"); 
     return; 
    } 

    myCustomer.Id = convertedId; 
    myCustomer.Name = fullNameTextBox.Text; 
    myCustomer.Address = addressTextBox.Text; 
    myCustomer.Email = emailTextBox.Text; 
    myCustomer.Phone = phoneNumberTextBox.Text; 

    // check if the DateTime is a valid dateTeime 
    DateTime convertedDate; 
    if (!DateTime.TryParseExact(addressTextBox.Text,"MM/dd/yyyy", null, System.Globalization.DateTimeStyles.AssumeLocal, out convertedDate)) 
    { 
     MessageBox.Show("The filed is not a valid date"); 
     return; 
    } 

    myCustomer.AddDate = convertedDate; 


    myCustomer.TotalTransactions = Convert.ToInt32(totalTransactionsTextBox.Text); 
} 
+0

Это отличный пример! Спасибо огромное! – user2168112

0

Вы можете подтвердить ввод, добавив некоторые коды, возьмите AddDate, например:

try{ 
    myCustomer.AddDate = Convert.ToDateTime(addressTextBox.Text); 
} 
catch 
{ 
    MessageBox.Show("Add Date is not valid"); 
    return; 
} 

и, если это возможно, используйте элемент управления DatePicker для ввода даты.

1

Вы можете попробовать бросок и что-то делать, если оно не работает?

private bool ValidInteger(string value) 
{ 
    int notUsed=0; 
    return Int32.TryParse(value, out notUsed); 
} 

Я удалил ключевое слово function. Код теперь компилируется.

+0

Этот код не компилируется. –

0

Я предлагаю вам использовать правильное имя в своих текстовых полях. Ваш код показывает, что при сохранении даты, вы используете ваш addressTextBox.Text:

myCustomer.AddDate = Convert.ToDateTime(addressTextBox.Text); 

Я думаю, что это должно быть что-то вроде этого:

myCustomer.AddDate = DateTime.Parse(dateTextBox.Text,"MM/dd/yyyy"); 

Также лучше использовать контроль DateTimePicker скорее чем TextBox, когда пользователь выбирает даты. Надеюсь это поможет!

Смежные вопросы