如何跳过自动添加到循环中的DataGridView的空行?

问题描述:

我有一个简单的C#应用​​程序,您必须在其中输入数据在DataGridView。我已经为列实现了一些验证器,如空值或非数字输入。我按了一个按钮后进行检查foreach (DataGridViewRow row in dataGridView1.Rows) {...}如何跳过自动添加到循环中的DataGridView的空行?

我面临的问题是它也试图验证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 ... 
} 
+0

作品,谢谢! – Geo 2014-11-04 12:42:41

+0

除非措辞恰到好处,否则通过谷歌很难找到这些信息;直到你的回答引起我的注意,我才知道这个属性存在。非常感谢分享这个非显而易见的,但令人惊讶的简单提示。 – 2017-04-18 19:59:31