Member 13512434 Ответов: 3

Умножить текстовое поле с ячейкой


Я пытаюсь умножить текстовое поле с ячейкой в datagridview, я пытался разбить его на несколько сегментов, кто-нибудь знает, где я ошибся?
public int a, b, c, i;

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    foreach (DataGridViewRow dg in dataGridView1.Rows)
    {
        try
        {
            a = int.Parse(OdrQuantityTxtBx.Text);
            b = (int)dataGridView1.Rows[i].Cells[1].Value;
            c = (a * b);
                     
            c = dataGridView1.Columns[i].Cells[1].Value;
        }
        catch
        {
        }
    }
}


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

использование 'public double' для a,b,c

3 Ответов

Рейтинг:
2

lukeer

1) бросьте блок try-catch-block. Он может обнаруживать ошибки только с точностью до "где-то в этом блоке", вам может понадобиться больше точности. И просто проглатывание исключения в пустом блоке catch ничего не решает. Он просто скрывает реальные проблемы и мешает вам их исправить.
2) int.TryParse(OdrQuantityTxtBx.Txt, out a) есть все в комплекте. Он возвращает логическое значение, которое вы можете проверить на успешный синтаксический анализ.
3) dataGridView1.Rows[i].Cells[1].Value являться строкой. Вы не можете просто бросить его на int Вам нужно снова включить 2).
4) c = dataGridView1.Columns[i].Cells[1].Value; перезаписывает ваш драгоценный результат умножения с одной строки ранее значением ячейки. Я думаю, ты хочешь, чтобы все было наоборот.
Но эта ячейка-та же самая, которую вы изначально использовали для умножения. Вместо этого вы можете сохранить результат в другой ячейке. И.Столбцы[i] не имеют элемента с именем "ячейки".
И я все еще предполагаю .Значение должно быть типа string, поэтому вы не можете присвоить его ни целому числу, ни двойному.
Так что, может быть, есть еще одна колонка и использовать
dataGridView1.Rows[i].Cells[2].Value = c.ToString();


Рейтинг:
1

OriginalGriff

Во - первых, никогда не "глотайте" исключения-это скрывает проблемы, потому что вам даже не говорят, что это проблема.
Во - вторых, не используйте исключения как часть "нормальной обработки" - вместо блока try...catch, чтобы справиться с неудачами преобразования, используйте TryParse, который возвращает true или false в зависимости от успеха или неудачи преобразования значения.
В-третьих, зачем вообще использовать цикл, если конечным результатом всегда будет значение только из последней строки?


Рейтинг:
1

#realJSOP

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    int a;
    int b;
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (int.TryParse(OdrQuantityTxtBx.Text, out a) && 
            int.TryParse(row.Cells[1].Value.ToString(), out b))
        {
            // your code was overwriting the value that was in one of the 
            // cells you were using for the math. That seemed peculiar to 
            // me.
            row.Cells[2].Value = a * b;
        }
        else
        {
            // handle the error by either throwing an exception or displaying an 
            // error indicator in the cell that contains the result. 
        }
    }
}