我有一个简单的C#应用​​程序,您必须在其中输入DataGridView的数据。我已经为列实现了一些验证器,例如空值或非数字输入。我按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;
        }
    }
}

请帮忙。

谢谢,

最佳答案

您可以使用该行的 IsNewRow 属性:

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

关于c# - 如何跳过循环中自动添加到DataGridView的空行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26735188/

10-13 06:27