在gridview行中删除重复的值
我以前见过这个问题,并且之前回答过,但没有任何答案对我有帮助。我希望当我通过按下按钮从文本框中插入一个值时,如果该值已经存在于gridview中,那么它将被删除或根本不插入。在gridview行中删除重复的值
我的代码:
protected void Buton1_Click(object sender, EventArgs e)
{
DataTable dt = null;
if (Session["GridData"] == null)
{
dt = new DataTable();
DataColumn dc = new DataColumn("Name");
dt.Columns.Add(dc);
}
else
{
dt = Session["GridData"] as DataTable;
}
DataRow dr = dt.NewRow();
dr["Name"] = TextBox1.Text;
dt.Rows.Add(dr);
dt.AcceptChanges();
GridView1.DataSource = dt;
GridView1.DataBind();
Session["GridData"] = dt;
}
其更好您第一校验值存在或表中没有比它插入表中。
var data = (from row in dt.AsEnumerable()
where row.Field<string>("Name") == TextBox1.Text
select row).ToList();
if(data != null && data.Count > 0)
{
//insert new row in table
}
或
var data = (from row in dt.AsEnumerable()
select row).
FirstODefault(row=>row.Field<string>
("Name") == TextBox1.Text);
if(data != null)
{
//insert new row in table
}
尝试检查重复添加行之前:
bool isDuplicate = false;
foreach (DataRow row in dt.Rows)
{
if (row["Name"] == TextBox1.Text)
{
isDuplicate = true;
break;
}
}
然后做你的事,如果它不重复:
if (!isDuplicate)
{
DataRow dr = dt.NewRow();
dr["Name"] = TextBox1.Text;
dt.Rows.Add(dr);
dt.AcceptChanges();
GridView1.DataSource = dt;
GridView1.DataBind();
Session["GridData"] = dt;
}
好的答案,但Cezara H也希望删除数据,如果它已经存在。 –
为什么你不去linq或RowFilter在这里 –
@PranayRana不想错过的语法,因为我从手机回答:) – msmolcic
这样你就可以检查从Sqlserver s IDE如果该值已经存在,那么它不应该被插入,我认为这是更好地从SQL边检查,因为它需要较少的时间比从代码检查后面
像
if not exists (select name from table where [email protected]) begin insert into table values(name)values(@name) end
我得到错误“的查询主体必须以选择条款或组条款结束“。有什么缺失? –
@CezaraH - 我更新的答案,我认为与firstordefault问题,因此改变了它列出并检查计数... –
它不喜欢valuetosearch。即使在您编辑之后,这也是错误发生的地方。 –