Motiala Ответов: 2

Запустите цикл сразу. В случае.


У меня есть datagrid с двумя столбцами с несколькими строками.

Но в этом коде цикл выполняется только один раз. Почему?
private void btnsave_Click(object sender, EventArgs e)
{
    if (txtledger.Text.Length == 0)
    {
        MessageBox.Show("Fill all Infomation", "Exclamation!!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }
    else
    {

        try
        {
            for (int i = 0; i < txtEnter.Rows.Count; i++)
            {
                par = txtEnter.Rows[i].Cells[0].Value.ToString();
                amount1 = txtEnter.Rows[i].Cells[1].Value.ToString();
                Comparbal();

                quary = "INSERT INTO `account book` (`Traction Date`,Ledger,Particulars,`Vch Type`,Debits,Credits,FY,Narration)VALUES ('" + Vdate.Value.ToString("yyyy/MM/dd") + "','" + par + "','" + txtledger.Text + "','Payment'," + amount1 + ",0,'" + CFY + "','" + txtnar.Text + "')";
                Connection.executenonquery(quary);

                quary = "INSERT INTO `account book` (`Traction Date`,Ledger,Particulars,`Vch Type`,Debits,Credits,FY,Narration)VALUES ('" + Vdate.Value.ToString("yyyy/MM/dd") + "','" + txtledger.Text + "','" + par + "','Payment',0," + amount1 + ",'" + CFY + "','" + txtnar.Text + "')";
                Connection.executenonquery(quary);

                metroLabel2.Text = "Accounting Voucher:-" + (id + 1).ToString();
                txtledger.SelectedIndex = -1;
                txtEnter.CancelEdit();
                particuars.Dispose();
                amount.Dispose();
                txtnar.Clear();
                metroLabel2.Text = "";
                txtEnter.Rows.Clear();


            }
            MessageBox.Show("Vouchar Post");
        }
        catch
        {
            MessageBox.Show("Error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
}


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

Заранее спасибо. Я хочу сделать программное обеспечение для учетной записи. Этот код принадлежит платежному ваучеру

Graeme_Grant

Что происходит при нажатии на кнопку? Вы установили точку останова в верхней части функции и прошли через свой код, чтобы увидеть?

StM0n

Мое предположение было бы, что txtEnter.Строк.Счет - 1... вы проверяли?

Michael_Davies

Что это делает?

txtEnter.Rows.Четкий();

2 Ответов

Рейтинг:
2

CPallini

Как уже отмечалось Michael_Davies, заявление

txtEnter.Rows.Clear();
в конце цикла блок останавливает итерацию.


Рейтинг:
1

Patrice T

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]
-----
Ваша петля петляет один раз в строке txtEnter так долго как txtEnter не очищается.
Может быть, вам не стоит этого делать

txtEnter.Rows.Clear();

внутри цикла.