Как получить значения нескольких txtBoxes и отобразить сумму на новой странице?

На Page1.aspx у меня есть 3 txtBox с валидаторами сравнения, которые обеспечивают тип валюты.

На Page2.aspx у меня есть еще одно текстовое поле с именем txtResult, задачей которого является отображение суммы трех других txtBoxes при нажатии btnCalculate на Page1.

Проблема: я не могу заставить 3 txtBoxes обрабатываться как double, а не как строки. Если значения txtBox равны 1, 3 и 8, txtResult будет 138, а не 12.

Я попытался разобрать, но это не позволило не скомпилировать.

Код за Page1:

protected void btnCalculate_Click(object sender, EventArgs e)
{
    if (IsValid)
    {
        Server.Transfer("Page2.aspx");
    }
}

Код за Page2:

if (!IsPostBack)
{
    Page lastPage = (Page)Context.Handler;
    txtResult.Text = ((TextBox)lastPage.FindControl("txtGross")).Text
        + ((TextBox)lastPage.FindControl("txtValueOfAssets")).Text
        + ((TextBox)lastPage.FindControl("txtInvestments")).Text;
}

Попытка использовать TryParse:

txtResult.Text = 
    double.TryParse(((TextBox)lastPage.FindControl("txtGross")).‌​Text, out gross);

Ошибки с:

Не может неявно скрыть bool в строку

3 ответа

Решение

Вы можете использовать Double.Parse(текст), чтобы преобразовать текст в двойной. Так, например:

txtResult.Text = (Double.Parse(((TextBox)lastPage.FindControl("txtGross")).Text)
    + Double.Parse(((TextBox)lastPage.FindControl("txtValueOfAssets")).Text)
    + Double.Parse(((TextBox)lastPage.FindControl("txtInvestments")).Text)).ToString();

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

Текстовое свойство TextBox является типом String, поэтому добавление их приведет к объединению. Вам необходимо преобразовать значение Text в двойное значение перед добавлением.

Простой способ конвертации Convert.ToDouble("")

так что попробуйте это:txtResult.Text = Convert.ToDouble(((TextBox)lastPage.FindControl("txtGross")).Text) + Convert.ToDouble(((TextBox)lastPage.FindControl("txtValueOfAssets")).Text) + Convert.ToDouble(((TextBox)lastPage.FindControl("txtInvestments")).Text);

Поскольку ваши значения являются строками, они обрабатываются как строки и объединяются.

Вам необходимо сначала преобразовать эти значения в Double, а затем выполнить добавление.

В этом посте рассказывается о нескольких методах преобразования в double: преобразование строки в double в C#

По сути, вы можете использовать метод Convert.ToDouble() для преобразования вашего текстового поля Text value в double.

Convert.ToDouble(((TextBox)lastPage.FindControl("txtValueOfAssets")).Text)

Наилучшим подходом было бы заглянуть в метод TryParse(), чтобы гарантировать, что ваш код не прервется при подаче нечисловой строки.

Другие вопросы по тегам