Martin Lauritsen Ответов: 1

Подсчитывая ценовую ячейку, из моей динамической таблицы получается только последняя строка


Hi, I'm making a dynamic table with textboxes, and from each row I will summarize the prices based on the choices they have made. Thif I have 10 rows, I have 10 prizes that I would like to summarize in a literal sum. But my counter does not work properly, it only takes the last row in my table and putting in total


Что я уже пробовал:

string total = "";
for (int j = 0; j < Rows; j++)
{
    TextBox t = (TextBox)(PlaceHolder1.FindControl("txtPrice_" + j));

    string[] values = {t.Text};
    double number;
    CultureInfo culture = null;

    foreach (string value in values)
    {
        try
        {
            culture = CultureInfo.CreateSpecificCulture("dk-DK");
            number = Double.Parse(value, culture);


            total = value.ToString();
        }
        catch (FormatException)
        {

            culture = CultureInfo.CreateSpecificCulture("dk-DK");


            total = value.ToString();
        }


    }
    litSum.Text = total;
}

George Swan

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

1 Ответов

Рейтинг:
6

OriginalGriff

Ну да.
То, что вы делаете, это:

int total = 0;
for (int i = 1; i < 10; i++)
   {
   total = i;
   }
Console.WriteLine(total);
И вы удивляетесь, когда результат всегда "9".
Конечно, это так: вы переписываете значение total каждый раз, когда вы идете по кругу.
То, что вам нужно сделать, это:
int total = 0;
for (int i = 1; i < 10; i++)
   {
   total += i;
   }
Console.WriteLine(total);
И вы получите эту сумму.
Но вам не нужно быть таким сложным!
culture = CultureInfo.CreateSpecificCulture("dk-DK");
NumberStyles style = NumberStyles.Number;
double number;
double total = 0.0;
foreach (string value in values)
    {
    if (Double.TryParse(value, style, culture, out number))
       {
       total += Number;
       }
    }
litSum.Text = total.ToString();


Martin Lauritsen

Он работает, спасибо Вам большое, я пытаюсь перейти на десятичную систему счисления, так что он сохраняет десятичные числа. Но это не работает, вы не знаете, почему ?:) я принимаю решение

OriginalGriff

Не видя вашего кода и того, что именно вы сделали? Понятия не имею! :смеяться:
Всегда считайте, что мы не видим ваш экран...

Martin Lauritsen

ха-ха ОФК ;)
десятичное число = 0;
десятичная сумма = 0;

for (int j = 0; j < Rows; j++)
{
TextBox t = (текстовое поле)(PlaceHolder1.FindControl("txtPrice_" + Дж));

string[] values = { t.Text };

CultureInfo culture = null;

культура = CultureInfo.CreateSpecificCulture("dk-DK");
NumberStyles style = NumberStyles.Номер;


по каждому элементу (строка значения в значения)
{
если (десятичное число.Метод tryparse(значение, тип, культура, количество))
{
общее число;
}
лицум.текстовая строка.Формат("{0:0.00}", всего.Метод toString());
}
}

OriginalGriff

Почему вы создаете массив из одного значения только для того, чтобы обработать его с помощью цикла foreach? В этом нет никакого смысла...

Начните с точного просмотра того, что находится в ваших текстовых полях - и я имею в виду именно это, используйте отладчик, чтобы узнать - и посмотрите, что он возвращает в результате TryParse.
Избавьтесь от массива и foreach - они вам не нужны - и переместите определения культуры и стиля за пределы внешнего цикла.

Какие входные данные вы получаете, и что происходит, когда вы их получаете?

            decimal number = 0;
            decimal total = 0;
            CultureInfo culture = CultureInfo.CreateSpecificCulture("dk-DK");
            NumberStyles style = NumberStyles.Number;

            for (int j = 0; j < Rows; j++)
                {
                TextBox t = (TextBox)(PlaceHolder1.FindControl("txtPrice_" + j));
                if (t != null)
                    {
                    string value = t.Text;
                    if (decimal.TryParse(value, style, culture, out number))
                        {
                        total += number;
                        }
                    }  // breakpoint this line, and look at value and number
                }
            litSum.Text = String.Format("{0:0.00}", total.ToString());

Martin Lauritsen

я получаю номер вот так 58750 и он должен быть 58750

Martin Lauritsen

или это 1.942,00

OriginalGriff

И что именно вы вкладываете, чтобы получить его?
Что именно находится в текстовом поле.Свойство текста? Отладчик покажет вам, но я не вижу вашего экрана!

Martin Lauritsen

txt1 = 293,75
txt2 = 493,75
Итого = 787,5


OriginalGriff

А, это просто.
Вы неправильно поняли культурный код. Это не "ДК-ДК" для Дании, это "да-ДК" для "датчанин - Дания"
Измените на это:

CultureInfo culture = CultureInfo.CreateSpecificCulture("da-DK");
И это сработает.

Martin Lauritsen

omg вы правы, большое вам спасибо за всю помощь, теперь это работает :)

OriginalGriff

Всегда пожалуйста!