保存按钮适用于“默认”结果集,但不适用于过滤后的结果集

时间:2019-05-09 16:01:58

标签: c# .net

批量修改

背景:

我有一个网页,每个数据行上都有一个保存按钮。

每次调用AccessRecords函数的第一件事是dashboard.Controls.Clear();,其中仪表板是我的PlaceHolder。

我有一个索引/计数器,用于唯一地标识每一行。

为第6行创建保存按钮时,它将收到名称saveButton6,并将recordId存储在CommandName属性中,并将提示存储在CommandArgument属性中。

保存然后触发保存命令/功能,并且使用两个存储的属性来构建SQL过程的查询。

当屏幕的初始加载获取所有记录时,就存在这种工作正常的幻觉。现在,我已将初始负载切换为仅活动记录,并且,如果您希望查看非活动记录,则必须选择它并单击“搜索”按钮-再次调用AccessRecords函数,但传递不同的参数。

问题: 当我搜索不活动的记录并选择要更改的字段,然后单击“保存”按钮时,例如在第6行上,它不在选定的当前记录(ID 15)上运行保存功能,而是在保存的记录上运行保存功能。保持6行(ID 11)位置的初始载荷。

这使我相信,当AccessRecords清除PlaceHolder然后重新建立控件时-即使它正确地更新了数据字段,它也不是重新构建saveButton6,而是重新使用以前的saveButton6(ID为11而不是15)。

编辑我已经对控件进行了更彻底的清除,发现除了默认查询结果之外,save函数没有执行任何其他操作。因此,如果我有6条活动记录,则可以单击相关的保存按钮更改其状态,并保存其状态。但是,当我进行过滤以获取非活动记录或所有记录时,一旦我点击保存,首先页面会重新加载-并使用默认的过滤器设置重新加载。记录还原为与原始6条活动记录相同的记录(保存下拉列表显示为属于搜索结果前6行的那些值作为选定值)。然后,如果我在此处单击“保存”,它将像在搜索之前在初始页面上一样处理“保存”按钮。这意味着,除非我修复此错误或拥有初始视图,否则所有记录处于非活动状态的记录都无法重新激活。

编辑-感知到的问题来源: 看来这可能与我看到其他人解决的事件处理程序问题有关。任何其他事件处理程序触发时,都会执行pageLoad函数。代码中的放置顺序似乎无关紧要。

可能的解决方案: 我想到的一种解决方案是使初始负载为空,这样就不会创建任何按钮。然后,当选择搜索按钮时,页面将重新加载-但要正常工作,我将必须将所有选定的过滤器选项存储在url或会话变量或某些其他半永久性存储中,以便在下一个使用加载。此“修复”将非常乏味。

问题-已编辑: 如何解决加载问题,使save事件在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
}

1 个答案:

答案 0 :(得分:0)

https://www.devu.com/tutorials/cs-asp/articles/lesson-17-page_load-and-page-ispostback

花了我一段时间才能弄清楚如何正确执行此操作。每次我尝试将ispostback作为加载条件时,如果我单击一个按钮,都会导致黑屏-我以前没有else子句。

...Page_Load...
    if (!IsPostBack)
    {
        setInitialFilter();
    }
    else
    {
        HttpContext context = HttpContext.Current;
        string whereClause = (string)(context.Session["whereClause"]);
        accessRecord(whereClause); 
    }

...setInitialFilter()
{
    <logic to set initial conditions>
}

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>

    //Added the following two lines
    HttpContext context = HttpContext.Current;
    context.Session["whereClause"] = whereClause;

    accessRecord(whereClause)
}