您好我想在输入videoNo时为datagrid添加一个值。到文本框并单击确定,这将显示:
这是输出
然后,当我再次添加相同的视频时,它将在datagrid中复制,如下所示:
如何避免这种重复? 这是我添加
的代码 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 :(得分: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
没有重复项,用户搜索会返回相同的记录,因此您有两个选项。
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]);
}