2016-08-04 86 views
0

您好我想在输入videoNo时为datagrid添加一个值。到文本框,然后单击确定这将显示:Datagrid在添加时删除重复的行

Enter a VideoNo

这是输出

Output when Click OK

然后,当我再次添加相同的视频将复制在这样的数据网格: enter image description here

如何避免此重复? 这是我加入

private void button2_Click(object sender, EventArgs e) 
    { 
     listBox1.Visible = false; 
     if (txt_vidNo.Text == "") 
     { 
      MessageBox.Show("Input Video Number", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 

     } 
     else 
     { 
      DialogResult dt = MessageBox.Show("Add Video?", "Continue", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 

      if (dt == DialogResult.Yes) 
      { 

       panel4.Visible = true; 
       con = koneksyon.getConnect(); 
       con.Open(); 
       cmd = new SqlCommand("select * from Stock where videoNo ='" + txt_vidNo.Text + "'", con); 
       dr = cmd.ExecuteReader(); 
       while (dr.Read()) 
       { 

        dataGridView1.Rows.Add(dr[0], dr[1], dr[2], dr[3], dr[4], dr[5], dr[6], dr[7], dr[8]); 
       } 
       txt_vidNo.Clear(); 
       btn_Rent.Visible = true; 
       panelPay.Visible = true; 
       cmd.Dispose(); 
       con.Close(); 
       dr.Dispose(); 
      } 
      else 
      { 
       txt_vidNo.Clear(); 
      } 

     } 
    } 

我要的是代码,当我输入相同的数值也不会DataGrid中重复,我该怎么做这些?

+0

您的数据库中是否有重复的视频条目?您的Datarow中的任何值是否为唯一记录? –

+0

@BojanB - nope先生,我的目录号。是独特的原因,我将它设置为PrimaryKey – AlgorithNewbie

回答

0

您只需检查您的唯一密钥的值是否已经存在于数据网格中。

如果Column Catalog Number中的值与读取的目录编号相匹配,则可以使用LINQ来检查所有具有非空值的行。

while (dr.Read()) 
{ 
    if (dataGridView1.Rows.Cast<DataGridViewRow>().Where(row => row.Cells[0].Value != null).All(row => (int) row.Cells[0].Value != dr[0])) 
     dataGridView1.Rows.Add(dr[0], dr[1], dr[2], dr[3], dr[4], dr[5], dr[6], dr[7], dr[8]); 
} 
0

变化而(dr.Read())来,如果(dr.Read())

while (dr.Read()) 
{ 
    dataGridView1.Rows.Add(dr[0], dr[1], dr[2], dr[3], dr[4], dr[5], dr[6], dr[7], dr[8]); 
} 
0

我从评论明白,你只是想防止重复行,你的情况DB是不是有重复,它是用户搜索返回相同的记录,所以你有两个选择。

  1. 如果在网格中获取并获取这些视频编号,请不要查询这些视频编号。
  2. 正如以下示例所示,您可以防备重复。

while (dr.Read()) 
{ 
    if(!dataGridView1.Rows.Cast<DataGridViewRow>().Any(x=>x.Cells[0].Value == dr.GetInt32(0))) // or "GetString(0)" if it istring 
    { 
     dataGridView1.Rows.Add(dr[0], dr[1], dr[2], dr[3], dr[4], dr[5], dr[6], dr[7], dr[8]); 
    } 
} 
+0

这是什么(x = x.Cells [0] .Value == dr.reader sir? – AlgorithNewbie

+0

糟糕..它是错字,它应该是'x => x.Cells [0 ] .Value == dr.GetInt32(0)'。 –

+0

这是一个'Linq'语句,如果你不熟悉用'foreach'循环替换'Linq'。 –