Не может быть отрицательным и избегать ввода букв в текстовое поле

вот весь мой код для txtProductQuantity_TextChange:

protected void txtProductQuantity_TextChanged(object sender, EventArgs e)
    {
        TextBox txtQuantity = (sender as TextBox);

        //int tempForTryParse = 0;
        //if (!int.TryParse(txtQuantity.Text, out tempForTryParse))
        //{
        //    txtQuantity.Text = txtQuantity.Text.Substring(0, txtQuantity.Text.Length - 1);
        //}

        DataListItem currentItem = (sender as TextBox).NamingContainer as DataListItem; // getting current item on where user wants to add or remove
        HiddenField ProductID = currentItem.FindControl("hfProductID") as HiddenField;
        Label lblAvailableStock = currentItem.FindControl("lblAvailableStock") as Label;

        int tempInt = 0;
        if (txtQuantity.Text == string.Empty || txtQuantity.Text == "0" || txtQuantity.Text == "1" || double.Parse(txtQuantity.Text) < 0 || !int.TryParse(txtQuantity.Text, out tempInt))
        {
            txtQuantity.Text = "1"; //default value is 1, no action 
        }
        else
        {
            if (Session["MyCart"] != null) // not null means user has added a product in the shopping cart
            {
                if (Convert.ToInt32(txtQuantity.Text) <= Convert.ToInt32(lblAvailableStock.Text)) // check if quantity is greater than available stock
                {
                    DataTable dt = (DataTable)Session["MyCart"]; // if quantity is less than the available stock, go inside the code

                    DataRow[] rows = dt.Select("ProductID = '" + ProductID.Value + "'"); // select specific row depending on the product id

                    int index = dt.Rows.IndexOf(rows[0]);

                    dt.Rows[index]["ProductQuantity"] = txtQuantity.Text; // putting the value in the txtQuantityTextbox. changing the product quantity in the data table

                    Session["MyCart"] = dt; // add updated value to datatable
                }
                else // error if quntity is greater than available stock
                {
                    lblAvailableStockAlert.Text = " Alert: product buyout should not be more than the available stock!";
                    txtQuantity.Text = "1"; // automatically change the quantity back to 1.
                }

            }
        }
        UpdateTotalBill();
    }

я хочу, чтобы буквы не вводились пользователем. или что-то вроде этого по умолчанию будет установлено на "1", если они это сделают.


person Paolo Duhaylungsod    schedule 20.04.2016    source источник


Ответы (2)


Используйте оператор if для проверки

if(txtQuantity.Text.StartsWith("-")
{
    //Code if negative
}

Вы также можете проанализировать строку как число, а затем проверить, является ли она отрицательной.

if(int.Parse(txtQuantity.Text) < 0)
{
    //Code if negative
}

Итак, в контексте вашего кода вы можете использовать его так

if (txtQuantity.Text == string.Empty || txtQuantity.Text == "0" || txtQuantity.Text == "1" || txtQuantity.Text.StartsWith("-"))
   {
        txtQuantity.Text = "1"; //default value is 1, no action 
   }

or

if (txtQuantity.Text == string.Empty || txtQuantity.Text == "0" || txtQuantity.Text == "1" || int.Parse(txtQuantity.Text) < 0)
   {
        txtQuantity.Text = "1"; //default value is 1, no action 
   }

Чтобы избежать ввода текста в поле, в событии Text Changed для textBox вы должны добавить еще один критерий в этот оператор if, а также целочисленную переменную, которая будет действовать как выход

int tempInt = 0;
bool parsed = int.TryParse(txtQuantity.Text, out tempInt);
if (txtQuantity.Text == string.Empty || txtQuantity.Text == "0" || txtQuantity.Text == "1" || tempInt < 0 || !parsed)
   {
        txtQuantity.Text = "1"; //default value is 1, no action 
   }
person Alfie Goodacre    schedule 20.04.2016
comment
Спасибо друг. есть идеи, как избежать ввода букв на нем? потому что это дает мне ошибку, когда я это делаю. - person Paolo Duhaylungsod; 20.04.2016
comment
@PaoloDuhaylungsod отредактировал для этой ситуации - person Alfie Goodacre; 20.04.2016
comment
я показал весь свой код. или может быть так, что по умолчанию будет установлено значение 1, если они ввели букву? Спасибо - person Paolo Duhaylungsod; 20.04.2016
comment
@PaoloDuhaylungsod в этом случае, сразу после того, как вы установили отправителя в txtQuantity, вы можете поставить эту проверку, и если есть письмо, вы можете либо вернуться, чтобы ничего не произошло, либо просто позволить ему работать в любом случае - person Alfie Goodacre; 20.04.2016
comment
работал отлично. браво, спасибо :) - person Paolo Duhaylungsod; 20.04.2016
comment
Ой, подождите, при вводе двух букв выдает ошибку? одна буква в порядке, по умолчанию 1. - person Paolo Duhaylungsod; 20.04.2016
comment
Если вы предпочитаете, чтобы по умолчанию был только один, я заменю свой код, попробуйте еще раз, как только я отредактирую - person Alfie Goodacre; 20.04.2016
comment
да, я предпочитаю использовать по умолчанию 1. спасибо - person Paolo Duhaylungsod; 20.04.2016
comment
Последний фрагмент кода теперь должен заменить исходный if, он также создает новую переменную для TryParse - person Alfie Goodacre; 20.04.2016
comment
та же ошибка Входная строка имеет неправильный формат. - person Paolo Duhaylungsod; 20.04.2016
comment
Это не кажется правильным, у вас все еще есть оригинальная версия этого фрагмента? Его следовало удалить - person Alfie Goodacre; 20.04.2016
comment
Я удалил эти коды: int tempForTryParse = 0; if (! int.TryParse (txtQuantity.Text, out tempForTryParse)) {txtQuantity.Text = txtQuantity.Text.Substring (0, txtQuantity.Text.Length - 1); } - person Paolo Duhaylungsod; 20.04.2016
comment
Я отредактировал свои обновленные коды, сэр - person Paolo Duhaylungsod; 20.04.2016
comment
@PaoloDuhaylungsod Попробуйте обновленный код - person Alfie Goodacre; 20.04.2016
comment
у тебя есть аккаунт на Фейсбуке? я думаю, ты мне нужен для моего проекта. хе-хе - person Paolo Duhaylungsod; 20.04.2016
comment
Позвольте нам продолжить это обсуждение в чате. - person Alfie Goodacre; 20.04.2016

удалось решить. я добавил

int.Parse(txtQuantity.Text)<1)

в первую строку моего кода.

person Paolo Duhaylungsod    schedule 20.04.2016