1

我有一个 CompositeDataBoundControl,其中一列中有一个 CheckBox。CheckBox 使用 OnCheckboxChanged 处理程序设置为 AutoPostBack=True。现在,在复选框更改后,我将我的数据库值相应地更新为 true/false。这一切都很好。

现在我添加了带有分页功能的jquery datatables.net插件,一次显示 10 条记录。当我更新第一页上的复选框时,一切正常。然后,如果我移至第二页并选择一个复选框,它会更新该记录,但随后会在我更改 page1 上的复选框时开始触发 OnCheckBoxChanged 处理程序。在所有这些时间里,它都会重置这些复选框。

-> 在代码隐藏的任何地方都没有其他显式处理程序声明,这是 C#,所以没有 Handles 子句问题。-> 有人在这里说它可能是数据绑定,但问题仅在于使用数据表时。所以不确定是不是这样,但我正在调查它。

编辑在此处查看 示例

重现问题的步骤: 1)在第 1 页上选择几个复选框。复选框将回发并更新消息。

2) 现在转到第 2 页并选择一个复选框。chbx 将回发,网格将移至 page1。请注意您在 page1 中选择的 chbx 丢失了选择。如果您移至第 2 页,您将看到所做的选择仍然存在。

编辑似乎这是问题。现在发现实施起来几乎没有困难。需要帮助。

我不确定发生了什么。有人有类似的问题吗?

4

1 回答 1

0

问题是数据表没有回发隐藏的行。所以我需要将它们添加回我的表,如以下链接中所述:http: //datatables.net/forums/discussion/3099/x&page=1

尽管与 ASP.NET ScriptManager/UpdatePanel 一起使用时,我必须在 beginRequest 之前将它们添加回来,如此处所述:

如何在 ASP.NET 异步回发之前禁用或删除不必要的表单元素?

一旦我在我的示例项目中实现它,我将添加一些代码。这是我实现的代码:

//code-behind Page_Load
ScriptManager.RegisterOnSubmitStatement(this, this.GetType(), "beforePostback", "beforePostback()");

// JS code
var table;
$(function(){
    table = $(".mygrid").dataTable();
});

function beforePostback() {
    //table is the object that holds the dataTable 
    if(table!='undefined' && $(".mygrid thead").length>0){
         hiddenRows = table.fnGetHiddenNodes();
                $('table.mygrid tbody').append(hiddenRows);
     }
}
于 2013-03-05T23:08:38.473 回答