Datagrid添加时删除重复的行

时间:2016-08-04 08:06:18

标签: c# mysql datagridview datagrid

您好我想在输入videoNo时为datagrid添加一个值。到文本框并单击确定,这将显示:

Enter a VideoNo

这是输出

Output when Click OK

然后,当我再次添加相同的视频时,它将在datagrid中复制,如下所示: 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中重复,我该怎么做?

3 个答案:

答案 0 :(得分:0)

将while(dr.Read())更改为if(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]);
}

答案 1 :(得分:0)

我从评论中了解到,您只想防止重复行,在您的情况下DB没有重复项,用户搜索会返回相同的记录,因此您有两个选项。

  1. 如果在网格中提取并显示这些视频编号,请不要查询这些视频编号。
  2. 如下例所示,您可以防范重复。
  3. 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]);
        }
    }
    

答案 2 :(得分:0)

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

如果列目录编号中的值与读取的目录编号匹配,则可以使用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]);
}