我之前已经看过这个问题并得到了回答,但没有一个答案对我有帮助。当我通过按下按钮从文本框插入一个值时,如果该值已存在于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;
}
答案 0 :(得分: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
}
答案 1 :(得分: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;
}
答案 2 :(得分:0)
所以你可以从Sqlserver端检查一下如果该值已经存在则不应该插入我认为从sql端检查更好,因为它比从后面的代码检查花费的时间少
像
if not exists (select name from table where name=@name)
begin
insert into table values(name)values(@name)
end