【发布时间】:2012-08-08 15:10:58
【问题描述】:
不久前我发布了一个关于避免在数据库中添加空白行的帖子。在单击添加行之前,无论用户是否取消了新行,它都会自动将空白行添加到数据库中。我想通了,但现在遇到了一个新问题。如果用户决定在编辑新行时重新加载页面(F5),它将在数据库中添加一个空白行,这对我的情况来说是不行的。谁能帮我弄清楚如何避免这种情况?
下面是我的插入代码:
protected void gv_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Insert") //- this is needed to explain that the INSERT command will only work when INSERT is clicked
{
gv.DataBind();
DataTable d = dbcon.GetDataTable("SELECT * FROM CIS.CIS_TRANS ORDER BY ID DESC", "ProjectCISConnectionString");
string transCode = "", fundCode = "", BSA_CD = "", DP_TYPE = "";
if (d.Rows.Count > 0)
{
transCode = d.Rows[0]["TRANS_CD"].ToString();
fundCode = d.Rows[0]["FUND_CD"].ToString();
BSA_CD = d.Rows[0]["BSA_CD"].ToString();
DP_TYPE = d.Rows[0]["DP_TYPE"].ToString();
if (transCode.Trim().Length > 0)
{
dbcon.Execute("INSERT INTO CIS.CIS_TRANS (ID,TRANS_CD) VALUES(CIS.S_CIS_TRANS.nextval,'')", "ProjectCISConnectionString");
gv.DataBind();
}
}
gv.EditIndex = gv.Rows.Count - 1;
}
else if (e.CommandName == "Cancel")
{
DataTable d = dbcon.GetDataTable("SELECT * FROM CIS.CIS_TRANS ORDER BY ID DESC", "ProjectCISConnectionString");
string transCode = "";
if (d.Rows.Count > 0)
{
transCode = d.Rows[0]["TRANS_CD"].ToString();
if (transCode.Trim().Length == 0)
{
dbcon.Execute(string.Format("DELETE CIS.CIS_TRANS WHERE ID = '{0}'", d.Rows[0]["ID"]), "ProjectCISConnectionString");
gv.DataBind();
}
}
}
}
【问题讨论】:
-
当您说“当用户在编辑时尝试重新加载页面时”是指当用户在编辑表单时按 F5 时......?
-
是的,或者当他们只是选择网址并点击进入时。
-
为什么一开始就打电话给
gv.DataBind();? -
这实际上是一个错误的输入。由于我一直在更改我的代码来解决我的第一个问题,即在点击时添加一个空白行(不想要这个,只想在所有信息都填满后添加一行),我把它放在我的应用程序中。
标签: c# asp.net database visual-studio-2010