Как пропустить пустую строку, автоматически добавленную в DataGridView в цикле?

у меня есть простое приложение c#, в котором вы должны ввести данные в DataGridView. Я реализовал некоторые валидаторы для столбцов, такие как значения null или нечисловые входные данные. Я делаю проверки после того, как кнопка была нажата foreach (DataGridViewRow row in dataGridView1.Rows) {...}

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

private void button1_Click(object sender, EventArgs e)
{
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        string inputItemNr;
        string inputMHD;
        string inputCharge;
        string inputSupplNr;
        string inputPrnCnt;
        UInt32 itemnr;
        DateTime mhd;
        string mhdFormat = "yyMMdd";
        string batch;
        byte prncnt;

        if (row.Cells[0].Value == null)
        {
            MessageBox.Show("Enter item number");
            return;
        }
        else
        {
            inputItemNr = row.Cells[0].Value.ToString();
        }

        if (!UInt32.TryParse(inputItemNr, out itemnr))
        {
            MessageBox.Show("Incorrect item number: " + inputItemNr);
            return;
        }

        if (row.Cells[1].Value == null)
        {
            MessageBox.Show("Enter MHD");
            return;
        }
        else
        {
            inputMHD = row.Cells[1].Value.ToString();
        }

        if (!DateTime.TryParseExact(inputMHD, mhdFormat, CultureInfo.InvariantCulture,
            DateTimeStyles.None, out mhd))
        {
            MessageBox.Show("Incorrect MHD: " + inputMHD);
            return;
        }

        if (row.Cells[2].Value == null)
        {
            inputCharge = DateTime.Now.ToString("yyMMdd");
        }
        else
        {
            inputCharge = row.Cells[2].Value.ToString();
        }

        if (row.Cells[3].Value == null)
        {
            batch = inputCharge;
        }
        else
        {
            inputSupplNr = row.Cells[3].Value.ToString();
            batch = inputCharge + " " + inputSupplNr;
        }

        if (row.Cells[4].Value == null)
        {
            inputPrnCnt = "1";
        }
        else
        {
            inputPrnCnt = row.Cells[4].Value.ToString();
        }

        if (!byte.TryParse(inputPrnCnt, out prncnt))
        {
            MessageBox.Show("Incorrect print count: " + inputPrnCnt);
            return;
        }
    }
}

пожалуйста помощь.

спасибо,

1 ответов


можно использовать IsNewRow свойства строки:

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    if (row.IsNewRow) continue;
    // rest of your loop body ...
}