【问题标题】:While inserting new record into database, it is updating old record in grid view在将新记录插入数据库时​​,它正在更新网格视图中的旧记录
【发布时间】: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


【解决方案1】:

尝试清除 HiddenField1.Value=""; 在 bindgrid() 之前;

【讨论】:

  • 嘿,谢谢你 abhijit..它在清除 hiddenfield 值后工作,非常感谢你们
猜你喜欢
  • 2015-08-14
  • 1970-01-01
  • 2019-09-12
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
相关资源
最近更新 更多