Как обновить / изменить / очистить данные в txtbox без отображения ошибки

Я работаю над небольшим приложением для выставления счетов-фактур на WF. У меня есть таблица клиентов и таблица продуктов. Затем я заполняю имя клиента и название продукта через поля со списком в форме продажи. Когда пользователь выбирает элемент из поля со списком ProductName, другие текстовые поля, такие как Price и ProductID, автоматически заполняются данными из таблицы продуктов из базы данных. У меня также есть текстовое поле txtQuantity, которое можно ввести для количества для заказа продукта. После ввода числа для количества, промежуточного итога, GST (который является налогом в Сингапуре) и итога вычисляются автоматически, и эти значения появляются в текстовых полях Промежуточный итог, GST и Итого. Когда пользователь удаляет количество для обновления / изменения, отображается сообщение об ошибке: «Исключение формата было необработанным, входная строка была в неправильном формате». Мне нравится предотвращать эту ошибку, чтобы мое приложение перестало работать, когда пользователь удаляет количество или хочет изменить его на новое значение. Как мне это сделать, потому что я совершенно потерялся здесь. Ниже мой код.

private void txtQuantity_TextChanged(object sender, EventArgs e)
{
   int iQuantity = Convert.ToInt32(txtQuantity.Text);

   decimal dPrice = Convert.ToDecimal(txtPrice.Text);

   decimal dSubtotal = dPrice * iQuantity;
   decimal dGST = dSubtotal * 7/100;
   decimal dTotal = dSubtotal + dGST;

    txtSubTotal.Text = Convert.ToString(dSubtotal);
    txtGST.Text = Convert.ToString(dGST);
    txtTotal.Text = Convert.ToString(dTotal);

}

Я также хотел установить параметры для текстового поля количества, как только для ввода чисел. Я сделаю это позже. Это будет еще одна вещь, которую нужно исследовать. Любые советы по этому поводу также приветствуются и ценятся.


person joekk    schedule 22.04.2014    source источник
comment
Вам нужно научиться отлаживать, чтобы вы могли найти строку, которая генерирует исключение, и понять для себя, что происходит не так. Я предполагаю, что txtQuantity или txtPrice пусты, а ваша Convert функция не работает. Вы можете просто проверить их, прежде чем что-либо делать (используйте string.IsNullOrEmpty()).   -  person Sinatr    schedule 22.04.2014
comment
Вы должны использовать int.TryParse и decimal.TryParse, чтобы проверить, совместимы ли данные с типом данных.   -  person LarsTech    schedule 22.04.2014


Ответы (1)


Я бы пропустил все ваши строковые входы через следующее (или что-то подобное), прежде чем пытаться назначить их целочисленной переменной, особенно при работе с прямым пользовательским вводом.

string myVar1;

//Something that assigns a value to myVar1

if(String.IsNullOrEmpty(myVar1))
{
 myVar1 = "0";
}
else
{
  int number;
  bool result = Int32.TryParse(myVar1, out number);
  if (result)
  {
     //you have a valid input and valid parse, do whatever you need with number     variable     
  }
  else
  {
    //bad input, reset to blank and show error message
  }

}

Обратите внимание, что приведенный выше код является примером и, хотя он довольно близок к тому, что вы, вероятно, хотите, вам нужно будет изменить его, прежде чем просто скопировать / вставить в свое приложение

person Pseudonym    schedule 22.04.2014
comment
Благодарим за образец кода. Я понял это на основе вашего кода. Теперь он работает нормально. Теперь я собираюсь подробнее изучить, как вычислить количество в текстовом поле по сравнению с количеством в таблице. У меня есть количество в таблице продуктов. Количество из текстового поля будет сверяться с количеством в таблице продуктов, чтобы увидеть, есть ли достаточный запас для продажи. В таком случае это количество, включая другие товары, будет сохранено в Таблице продаж. Я еще не кодировал. Мне все еще нужно изучить это. Любое руководство по этому поводу, пожалуйста. - person joekk; 23.04.2014
comment
Не уверен, что вы спрашиваете, если у вас есть оба количества, вы сможете проверить, равны ли они, или одно меньше или больше другого - person Pseudonym; 23.04.2014