C# 在ASP.NET和C中使用相同的提交来添加和编辑数据库值#

C# 在ASP.NET和C中使用相同的提交来添加和编辑数据库值#,c#,asp.net,forms,postback,C#,Asp.net,Forms,Postback,我使用同一个提交按钮添加新行,并在和ASP.NET表单中编辑数据库表的行值。我使用CommandArgument更改所应用的方法 protected void btnSave_Click(object sender, EventArgs e) { if (!CheckProfileComplete()) { btnSave.CommandArgument = "new"; btnSave.Text = "Sav

我使用同一个提交按钮添加新行,并在和ASP.NET表单中编辑数据库表的行值。我使用
CommandArgument
更改所应用的方法

protected void btnSave_Click(object sender, EventArgs e)
    {
       if (!CheckProfileComplete())
        {
            btnSave.CommandArgument = "new";
            btnSave.Text = "Save";
        }
        else
        {
            btnSave.CommandArgument = "update";
            btnSave.Text = "Update";
        }
    }
protected void btnSave_Click(object sender, EventArgs e)
    {
        if (!Page.IsValid)
            return;
        string strCmd = this.btnSave.CommandArgument;
        if (strCmd.ToLower() == "new")
        {
             //Add new Record
        }
        else if(strCmd.ToLower() == "update")
        {
             //Update existing record.
        }
     }
addnew
的情况下,将显示一个空白表单,而在
Update
中,将显示一个包含先前添加到数据库表中的数据的表单,用户可以在其中编辑值,然后保存它。检查一些其他参数后,
CommandArgument
在页面加载时更新

addnew
方法运行良好,但是在
Update
的情况下,我无法编辑值。我的意思是表单发布了在呈现给用户进行编辑之前动态填充的相同值。单击保存(更新模式)按钮后,不会显示任何更改。即使在值被更改并发回后,表单似乎仍将其以前的状态作为当前状态

例如,当最初从数据库读取时,如果
tbName.Text
具有值
foo

用户编辑了它,现在
tbName.Text
在回发之前有
bar


但是,当表单在调试模式下发布时,
tbName.Text
显示
foo
作为当前值,而不是
bar

,您需要确定发生了哪些事件,从而需要更改按钮的工作方式。一旦你知道了这一点,那么,在该活动中,你可以取消订阅按钮并订阅其他内容

private void OnMyEvent()
{
   button1.Click -= "theEventIDoNotWant";
   btnSave.Click += new EventHandler(theEventIWant);
}

据我所知,它应该是这样工作的:

<asp:LinkButton ID="btnSave" runat="server" CommandArgument="Add" OnCommand="btnSave_Click">Save</asp:LinkButton>
您只需要实现一个事件处理程序,并使用CommandEventArgs检查随事件发送的参数

希望这对你有帮助


干杯

你能告诉我bindData的代码以备更新吗。。如何填充控件,添加相同的控件会使问题变得很长。我要做的是查询数据库中的一条记录,并将其存储在数据集中(只返回1行)。现在,我使用数据集的表(dt)遍历datarow
foreach(datarow dr in dt.Rows)
,然后使用
tbName.Text=dr[“PName”]”填充我的控件。ToString()
似乎在您尝试更新值时,代码正在重新绑定数据,所以请检查是否正在使用
(!IsPostBack)
当您填充值以进行更新时,我认为这将出现在Page_Load事件中。@Cyberpks不必担心太长的问题,请发布您的代码。我只想知道您是如何获取标识列的值的,您是如何从db访问数据的。。
protected void btnSave_Click(object sender, CommandEventArgs e)
{
    if(string.Equals(e.CommandArgument,"Add"))
        {
            //do save logic here
            btnSave.CommandArgument = "Edit";
            btnSave.Text = "Update";
        }

        if (string.Equals(e.CommandArgument, "Edit"))
        {
            //do update logic here
            btnSave.Text = "Update done";
        }   
}