C # Как исправить ошибку: «Входная строка была не в правильном формате.» в текстовом поле - PullRequest
0 голосов
/ 08 сентября 2018

В приведенном ниже коде я пытаюсь проверить текстовое поле (txt_quantity и txt_discount)

Но вместо этого MessageBox.Show("Cannot be empty"); я получаю ошибку

('Входная строка была в неправильном формате.')

Я что-то здесь забыл?

  • txt_quantity (INTEGER)
  • txt_discount (DECIMAL)

    decimal Discount, DiscountTotal, Discountgiven, Total;
    int Cost, Quantity, ID;       
    byte[] data;
    public void Imagedisplay()
    {
        using (var con = SQLConnection.GetConnection())
        {
            using (var selects = new SqlCommand("Select * from employee_product where Codeitem =@Codeitem ", con))
            {
                selects.Parameters.Add("@Codeitem", SqlDbType.VarChar).Value = _view.txt_code.Text;
                using (var reader = selects.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        data = (byte[])reader["Image"];
    
                        Cost = Convert.ToInt32(reader["Unitcost"]);
                        Convert.ToInt32(DiscountTotal);
                    //  This is where i'm getting the error at  
                        Quantity = Convert.ToInt32(txt_quantity.Text);
                        Discount = Convert.ToDecimal(txt_discount.Text); //
                        Discountgiven = Cost * (Discount / Convert.ToDecimal(100));
                        DiscountTotal = Cost - Discountgiven;
                        Total = DiscountTotal * Quantity;
                    }
    
                }
            }
        }
    }
    
    private void btn_ok_Click(object sender, EventArgs e)
    {
        Imagedisplay();
        using (var con = SQLConnection.GetConnection())
        {
            if (string.IsNullOrEmpty(txt_quantity.Text) || string.IsNullOrEmpty(txt_discount.Text))
            {
                MessageBox.Show("Cannot be empty");
            }
            else
            {                    
                    using (var command = new SqlCommand("Insert into product_result (Date, Image, Code, Name, Price, Discount, Quantity, Total) Values (@Date, @Image, @Code, @Name, @Price, @Discount, @Quantity, @Total)", con))
                    {                         
                        command.Parameters.Add("@Date", SqlDbType.VarChar).Value = date;
                        command.Parameters.Add("@Image", SqlDbType.VarBinary).Value = data;
                        command.Parameters.Add("@Code", SqlDbType.VarChar).Value = _view.txt_code.Text.Trim();
                        command.Parameters.Add("@Name", SqlDbType.VarChar).Value = _view.txt_name.Text.Trim();
                        command.Parameters.Add("@Price", SqlDbType.VarChar).Value = _view.txt_price.Text;
                        command.Parameters.Add("@Discount", SqlDbType.Decimal).Value = txt_discount.Text.Trim();
                        command.Parameters.Add("@Quantity", SqlDbType.Int).Value = txt_quantity.Text.Trim();
                        command.Parameters.Add("@Total", SqlDbType.Decimal).Value = Total;
                        command.ExecuteNonQuery();
                        Totals();                      
                    }
                    using (var selects = new SqlCommand("Update employee_product set quantity = quantity - @Quantity where Codeitem= @Codeitem", con))
                    {
                        selects.Parameters.Add("@Codeitem", SqlDbType.VarChar).Value = _view.txt_code.Text;
                        selects.Parameters.Add("@Quantity", SqlDbType.Int).Value = txt_quantity.Text;
                        selects.ExecuteNonQuery();
                        this.Close();                          
                    }                   
                _view.Display();
            }
        }          
    }
    

1 Ответ

0 голосов
/ 08 сентября 2018

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

Если вы используете целые числа, вам просто нужно привести к int при извлечении значения, в противном случае он возвращает десятичное число. Итак, ваш код будет:

Quantity = Convert.ToInt32(numericupdown1.Value);
Discount = numericupdown2.Value;

Если вы склонны к использованию текстовых полей, вам нужно удалить пробел с помощью .Trim()

Quantity = Convert.ToInt32(txt_quantity.Text.Trim());

И использовать int.TryParse вместо;

int value = 0;
if (int.TryParse(txt_quantity.Text.Trim(), out value)
{
    // Successful conversion so value now contains your integer
}

Вы можете сделать то же самое с десятичными знаками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...