背景:
我有一个网页,每个数据行上都有一个保存按钮。
每次调用函数AccessRecords时,它做的第一件事就是dashboard.Controls.Clear();
,其中dashboard是我的PlaceHolder。
我有一个索引/计数器,用于唯一地标识每一行。
当为第6行创建保存按钮时,它将接收名称saveButton6,并将recordId存储在CommandName属性中,将计数存储在CommandArgument属性中。
然后,save触发save命令/函数,两个存储的属性用于构建SQL过程的查询。
当屏幕的初始加载获取所有记录时,存在这样的错觉,即这是正常工作的。我现在已经将初始加载切换为仅活动记录,如果您希望查看非活动记录,则必须选择它并单击"search“按钮-这将再次调用AccessRecords函数,但会传入不同的参数。
保存问题:当我搜索非活动记录并选择要更改的字段,然后单击保存按钮时,例如在第6行,它不会对所选的当前记录(ID 15)运行保存功能,而是对初始加载的位置为6行(ID 11)的记录运行功能。
这让我相信,当AccessRecords清除PlaceHolder,然后重新建立控件时-即使它正确地更新了数据字段,它也没有重新构建saveButton6,而是重用了以前的saveButton6 ( ID为11而不是15)。
因此,如果我有6个活动记录,我可以点击相关的保存按钮来更改它们的状态,它们的状态将被保存。但是,当我过滤以获取非活动记录或所有记录时,只要我点击保存,页面就会重新加载-并使用默认的过滤器设置重新加载。这些记录恢复为与原始6个活动记录相同的记录(除了下拉列表将属于搜索结果前6行的记录显示为选定值之外)。然后,如果我在这里点击保存,它会处理保存按钮,就像它在搜索之前在初始页面上做的那样。这意味着,除非我修复了这个bug或将初始视图设置为所有记录非活动记录,否则永远不能重新激活。
编辑-感知到的问题来源:似乎这可能与我看到其他人解决的事件处理程序问题有关。其中,每当触发任何其他事件处理程序时,都会执行pageLoad函数。代码中的放置顺序似乎无关紧要。
一个可能的解决方案:我想到的一个解决方案是将初始加载设置为空,这样就不会创建按钮。然后,当搜索按钮被选中时,页面会重新加载--但要做到这一点,我必须将所有选定的过滤选项存储在url中,或者存储在会话变量中,或者存储在其他一些半持久性存储中,以便在下次加载时使用。这个“修复”将会非常乏味。
保存问题-编辑:我如何解决加载问题,以便在pageLoad事件之前触发事件?
protected void accessRecord()
{
<logic that determines initial whereClause>
accessRecord(whereClause)
}
protected void accessRecord(string FilterParam)
{
<logic that populates dashboard PlaceHolder with query results>
//also creates buttons per record for record changes
}
protected void filter(object sender, EventArgs e)
{
filter(); //Allows button push in filter div to load dashboard
}
protected void filter()//allows filter to be called in other places to get the current filter settings and load the dashboard
{
<logic that determines whereClause with user selected filters from a filter div>
accessRecord(whereClause)
}
protected void Page_Load(object sender, EventArgs e)
{
loadFilterButtonBar();
accessRecord();
}
protected void saveChange(object sender,EventArgs e)
{
//executes SQL queries to save the change made to the record
<logic for queries>
filter();
//Uses LinkButton lb = (LinkButton)sender;
// string recordID = (string)lb.CommandName;
// string statusDD_ID = (string)lb.CommandArgument;
//To determine which record to update
}
https://stackoverflow.com/questions/56063446
复制相似问题