在Paged Listview CheckBox_CheckedChanged事件不起作用

时间:2017-06-15 10:45:58

标签: c# asp.net listview checkbox datapager

问题是当我选中复选框时效果很好,但当我选中下一页的复选框时。上一页复选框未选中。 选中框Checked / Unchecked事件触发CheckedChanged事件。但是当我查看listview下一页的复选框时,取消选中listview上一页的复选框。

  

ListView.aspx代码

function isUserLogged(){
    var xhr = getXMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
            alert(this.responseText);
            if (this.responseText == "true") return true;
            else return false;
        }
    };
    xhr.open("POST", "php/is_user_connected.php", true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send(null);
}
  

CheckedChanged背后的代码

<table class=" example1 table table-bordered table-striped"> 
<thead>
        <tr>
<th>Sr no.</th>
                     <th>Parent Category</th>
                     <th>Title</th>
                     <th>Description</th>
                     <th>Image</th>
                     <th>Show on Homepage</th>
                     <th>Edit</th>
                     <th>Delete</th>
</tr>
</thead>
       <tbody>
        <asp:ListView ID="ListCourse" runat="server" OnItemCommand="ListCourse_ItemCommand" DataKeyNames="CID">
<LayoutTemplate>
                     <tr id="ItemPlaceholder" runat="server">
                     </tr>
                     </LayoutTemplate>
                     <ItemTemplate>
                        <tr class="gradeA">
                            <td>
                                <asp:Label ID="lblSrno" runat="server" Text='<%# Container.DataItemIndex+1 %>'></asp:Label>
</td>
<td>
                                                    <asp:Label ID="lbl" runat="server" Text='<%# GetCourse(Convert.ToInt32( Eval("CatID"))) %>'></asp:Label>
                                                </td>
                                                <td>
                                                    <asp:Label ID="Lbltitle" runat="server" Text='<%# Eval("Title") %>'></asp:Label>
                                                    <asp:Label ID="lablc" runat="server" Visible="false" Text='<%# Eval("CID") %>'></asp:Label>
                                                </td>
                                                <td>
                                                    <asp:Label ID="lblDescrption" runat="server" Text='<%# (Eval("Description").ToString().Length <=200)?Eval("Description").ToString(): Eval("Description").ToString().Substring(0, 200) + "..."%>'></b></asp:Label>
                                                </td>   
<td>
                                                    <img class="img_show " src="/Gallery/<%# Eval("Image")%>">
                                                </td>
                                                <td>
                                                    <asp:CheckBox ID="CheckCourse" runat="server" Style="margin-left: 50px;" OnCheckedChanged="CheckCourse_CheckedChanged" AutoPostBack="true" />
                                                </td>
                                                <td>
                                                    <asp:LinkButton ID="LinkEdit" runat="server" PostBackUrl='<%# "Add_New_Course.aspx?ID="+ Eval("CID")%>'>Edit</asp:LinkButton>
                                                </td>
                                                <td>
                                                    <asp:LinkButton ID="LinkDelete" runat="server" CommandName="DeleteCourse" CommandArgument='<%# Eval("CID") %>' OnClientClick='return confirm("Do you want to delete record ??")'> Delete</asp:LinkButton>
                                                </td>
                                            </tr>
                                        </ItemTemplate>
                                    </asp:ListView>
                                </tbody>
                            </table>

3 个答案:

答案 0 :(得分:0)

它不会触发,因为当回发触发时,服务器不知道复选框的先前状态,因此它不知道它是否被更改。

尝试将默认值设置为false,它应该可以正常工作

<asp:CheckBox ID="CheckCourse" runat="server" Checked="false" Style="margin-left: 50px;" OnCheckedChanged="CheckCourse_CheckedChanged" AutoPostBack="true" />

答案 1 :(得分:0)

您需要从列表中的某个已检查项目中保存ID。当您移动到ListView的第2页时,它会丢失其先前的状态。 将数据存储在viewstate中并从那里加载。要读取和绑定它,您需要处理ListView的PagePropertiesChanging和ItemDataBound事件处理程序。

这是关于Maintaining the state of checkboxes in ListView

的一个很好的解释

如果有帮助,请给+1。干杯!

答案 2 :(得分:0)

谢谢大家的帮助。我通过删除ListView中的复选框并添加文本而不是关于是否选中复选框(是/否),使用一些简单的过程解决了它。我认为这将是解决问题的最简单方法。