2015-07-10 109 views
1

我以前见过这个问题,并且之前回答过,但没有任何答案对我有帮助。我希望当我通过按下按钮从文本框中插入一个值时,如果该值已经存在于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; 
} 

回答

1

其更好您第一校验值存在或表中没有比它插入表中。

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 
} 
+0

我得到错误“的查询主体必须以选择条款或组条款结束“。有什么缺失? –

+0

@CezaraH - 我更新的答案,我认为与firstordefault问题,因此改变了它列出并检查计数... –

+0

它不喜欢valuetosearch。即使在您编辑之后,这也是错误发生的地方。 –

0

尝试检查重复添加行之前:

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; 
} 
+0

好的答案,但Cezara H也希望删除数据,如果它已经存在。 –

+0

为什么你不去linq或RowFilter在这里 –

+0

@PranayRana不想错过的语法,因为我从手机回答:) – msmolcic

0

这样你就可以检查从Sqlserver s IDE如果该值已经存在,那么它不应该被插入,我认为这是更好地从SQL边检查,因为它需要较少的时间比从代码检查后面

if not exists (select name from table where [email protected]) begin insert into table values(name)values(@name) end