При вставке новой записи в базу данных она обновляет старую запись в виде сетки
В представлении сетки у меня есть опция редактирования,если я нажму на кнопку Изменить, конкретная строка будет редактировать экран и заполнять текстовые поля и обновляться, как и ожидалось.При нажатии на кнопку Добавить новую запись в виде сетки,он собирается добавить экран с пустыми текстовыми полями,как и ожидалось, но если я добавляю новую запись, он обновляет предыдущую запись, которая была отредактирована.
Если я нажму на кнопку Добавить новую запись, то после заполнения текстовых полей он должен добавить новую запись, но он обновляет старую запись, которая редактировалась непосредственно перед добавлением новой записи.
Если я редактирую запись и обновляю ее, она правильно обновляется и возвращается в gridview и выделяет эту отредактированную запись,но теперь, если я пытаюсь добавить новую запись, она обновляет выделенную запись.
Что я уже пробовал:
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(); }
хранимая процедура:
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
ДАЛМАТИНЕЦ:
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(); }
БАЛАНС:
public void savprior(int id, string priorname, bool actv ) { dll.savePRIOR(id, priorname, actv); }