2015-04-14 75 views
0

我想要唯一的行。循环应该检查datagridview中的所有行,并查看它是否与文本框中的文本匹配,如果不匹配,它会将文本框中的值添加到datagridview。 我的问题:只有第一行工作,循环只遍历datagridview中的第一行,为什么不会继续通过其他行?从datagridview删除重复的行c#

private void laggtill_Click(object sender, EventArgs e) 
     { 

      bool dublett = false;   
      foreach (DataGridViewRow r in dataGridView1.Rows) 
      {        
       if(r.Cells[0].Value.ToString() == txtNamn.Text) // txtnamn is a textbox 
       { 
        dublett = true; 
        MessageBox.Show("Varan finns redan, gör om!");      
       } 
       break; 
      } 
      if(dublett == false) 
      { 
       DataRow dr; 
       dr = dt.NewRow(); 
       dr["Namn"] = txtNamn.Text; 
       dr["Pris"] = txtPris.Text; 
       dr["Varunummer"] = txtVNr.Text; 
       dr["Saldo"] = txtSaldo.Text; 
       dt.Rows.Add(dr); 
       dataGridView1.DataSource = dt.DefaultView; 
       clearRow(); 
       spara();     
      } 
      txtNamn.Text = ""; 
      txtPris.Text = ""; 
      txtSaldo.Text = ""; 
      txtVNr.Text = "";    
     } 
+4

break;外部如果你需要放入 – George

+0

Ya,因为'break'在if块之外,不管它在第一行中发现了什么,它都会跳出foreach循环。如果你在'if'中移动'break',那么它只会在第一次发现重复时跳出。 –

回答

1
if(r.Cells[0].Value.ToString() == txtNamn.Text) // txtnamn is a textbox 
{ 
    dublett = true; 
    MessageBox.Show("Varan finns redan, gör om!");  
    break;     
} 

移动突破;里面的if。

+0

当我这样做,我得到'System.NullReferenceException':“对象引用未设置为对象的实例。” on if(r.Cells [0] .Value.Equals(txtNamn.Text)) 。对不起的信息,即时通讯新的 – norrman

+0

@norrman调试并告诉我们什么是空的。 是否是r.Cells? r.Cells [0]? r.Cells [0]。价值? txtNamn? –

+1

您可能需要检查r.Cells [0]是否为空。 if(r.Cells [0]!= null && r.Cells [0] .Value.ToString()== txtNamn.Text)。类似的东西。 –