【发布时间】:2019-09-18 00:55:27
【问题描述】:
当我尝试添加新记录时,网格视图正在更新旧记录。
在网格视图中,我有一个编辑选项。如果我单击编辑,则特定行将编辑屏幕并填充文本框并按预期进行更新。在网格视图中单击添加新记录按钮时,它将按预期添加带有空文本框的屏幕,但如果我添加新记录,它会更新已编辑的先前记录。
protected void GV_PRIOR_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
int pid = Convert.ToInt32(GV_PRIOR.DataKeys[e.NewSelectedIndex].Value);
DataTable dt = bll.editprior(pid);
foreach (DataRow dr in dt.Rows)
{
HiddenField1.Value = dr["P_ID"].ToString();
tb_prioname.Text = dr["P_NAME"].ToString();
chk_actprior.Checked = dr["P_ACTIVE"].ToString() == "Y";
}
btn_savprior.Text = "UPDATE";
}
protected void btn_savprior_Click(object sender, EventArgs e)
{
if (HiddenField1.Value == "")
{
bll.savprior(0, tb_prioname.Text, Convert.ToBoolean(chk_actprior.Checked));
Response.Write("<script>alert('Priority Saved Successfully')</script>");
}
else
{
bll.savprior(Convert.ToInt16(HiddenField1.Value), tb_prioname.Text, Convert.ToBoolean(chk_actprior.Checked));
Response.Write("<script>alert('Priority Updated Successfully')</script>");
}
bindgrid();
}
如果我点击添加新记录按钮,在填充文本框后它应该添加一条新记录,但它正在更新在添加新记录之前编辑的旧记录。
Stored Procedure:
ALTER PROC [dbo].[SAVEPRIOR]
@P_ID int,
@P_NAME varchar(20),
@P_ACTIVE char(1)
AS
BEGIN
IF(@P_ID=0)
BEGIN
INSERT INTO PRIORITY(P_NAME) VALUES (@P_NAME)
END
ELSE
BEGIN
UPDATE PRIORITY SET P_NAME=@P_NAME,P_ACTIVE=@P_ACTIVE WHERE P_ID=@P_ID
END
END
DAL:
public void savePRIOR(int id, string priorname, bool actv )
{
SqlCommand cmd = new SqlCommand("SAVEPRIOR", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@P_ID", id);
cmd.Parameters.AddWithValue("@P_NAME", priorname);
cmd.Parameters.AddWithValue("@P_ACTIVE", (actv) ? "Y" : "N");
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
BAL:
public void savprior(int id, string priorname, bool actv )
{
dll.savePRIOR(id, priorname, actv);
}
【问题讨论】:
-
是否有可能,
bll对象将您编辑的记录的 id 存储在某处并使用它来更新记录而不是创建记录? -
如果我编辑记录并更新它,它会正确更新并返回到 gridview 并突出显示已编辑的记录,但现在如果我尝试添加新记录,它正在更新突出显示的记录。
-
您能否验证一下,如果在保存记录后调用
GV_PRIOR_SelectedIndexChanging?或任何其他可以设置HiddenField1.Value = dr["P_ID"].ToString();或类似的方法。我猜这会导致您的添加记录获取该 ID 并更新它
标签: asp.net sql-server gridview