【发布时间】:2013-11-11 07:19:31
【问题描述】:
我使用相同的提交按钮来添加新行,并在 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.
}
}
在Add New 的情况下,会显示一个空白表单,而在Update 中,会显示一个带有先前添加到数据库表中的数据的表单,用户可以在其中编辑值然后保存它。 CommandArgument 在页面加载时更新,在检查其他一些参数后。
Add New 方法运行良好,但我无法编辑 Update 的值。我的意思是表单发布了在呈现给用户进行编辑之前动态填充的相同值。单击保存(更新模式)按钮后未显示任何更改。即使在值被更改并回发后,表单似乎仍将其先前的状态作为当前状态。
例如,如果 tbName.Text 在最初从数据库读取时具有值 foo。
用户编辑了它,现在tbName.Text 在回发之前有bar。
但是当表单在调试模式下发布时,tbName.Text 显示 foo 作为当前值,而不是 bar
【问题讨论】:
-
在更新的情况下,能否请您给我看看 bindData 的代码。您是如何填充控件的。
-
@raman,添加相同的内容会使问题变得很长。我所做的是查询数据库中的记录,并将其存储在数据集中(仅返回 1 行)。现在使用数据集的表 (dt) 我遍历数据行
foreach(DataRow dr in dt.Rows),然后使用tbName.Text= dr["PName"].ToString()填充我的控件 -
当您尝试更新您的值时,您的代码似乎正在重新绑定数据,因此请检查您是否在填充更新值时使用
(!IsPostBack),我认为这将在 Page_Load 事件中。 -
@Cyberpks 不要担心冗长的问题,请发布您的代码。
-
我只是想知道您是如何获取您从 db 访问数据所依据的身份列的值的。