Просмотр сетки обновляет старую запись, когда я пытаюсь добавить новую запись.
В виде сетки у меня есть опция редактирования.Если я нажму на правку, то определенная строка будет редактировать экран и заполнять текстовые поля и обновляться, как ожидается.При нажатии кнопки «Добавить новую запись» в виде сетки будет добавлен экран с пустыми текстовыми полями, как и ожидалось, но если я добавлю новую запись, она обновит предыдущую запись, которая была отредактирована.
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);
}