我的查询返回gridview中的所有重复项。但是,当我从副本中选择一个记录时,两个记录都将被删除。当我在用户列表中的所有用户上使用直接选择时,删除选项将仅删除所选的行。我怀疑当我从dup中选择一条记录时,它正在使用select命令,因此抓住两个主键。
SelectCommand="SELECT [PKEY], [user] FROM [userlist]
WHERE LogonName IN (
SELECT [user]
FROM [userlist]
GROUP BY [user]
HAVING (COUNT([user]) > 1))"
DeleteCommand="DELETE FROM [userlist] WHERE [PKEY] = @PKEY" >
为复选框添加代码,使用直接选择时可以使用:
if (checkbox.Checked)
{
int PKEY = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value);
SqlDataSource1.DeleteParameters["PKEY"].DefaultValue = PKEY.ToString();
SqlDataSource1.Delete();
}
答案 0 :(得分:0)
您必须在PrimaryKey
上退回gridView.
,并在删除时传递所选的主键;
您必须确保在表格的数据库中将PKEY定义为PrimaryKey
您还可以在查询中添加DISTINCT,
SELECT DISTINCT ...
答案 1 :(得分:0)
如果您可以选择任意记录,则删除每个记录但每个记录只有一个记录的简单方法是使用主键的MAX并删除所有其他记录:
DELETE FROM [userlist]
WHERE PKEY NOT IN (
SELECT MAX(PKEY) pkey
FROM [userlist]
GROUP BY [user]
)