我知道关于这个问题有类似的问题(例如,这里和这里),但没有一个结果对我的问题有帮助。
我有一个 ListView 控件,显示数据库中注册的所有用户,并且每个用户都有一个复选框,无论用户是否获得批准,我想在复选框的 Checked 属性更改时直接保存更改。
我知道在ListView_ItemDataBound上添加事件处理程序是不正确的,因为在复选框的自动回发之后没有新的绑定,因此事件处理程序会丢失。另一方面,我不能直接将该方法附加到 ASPX 文件上,因为这样我就无法知道哪个用户受到更改的影响(至少,我认为我不能)。
有什么好说的吗?
多谢
你有几个选择。
ListView.ItemCommand
事件可能会触发。 不过,我不确定,因为文档只指定按钮。 您可能想要进行实验。
另一种选择是利用ListView.ItemCreated
命令。 我相信无论 ListView 是否绑定,它始终运行,因为始终必须创建项目,即使它来自 ViewState。 在该事件的事件处理程序中,您将执行的操作是将事件处理程序附加到CheckBox Click
或CheckChanged
事件(我忘记了CheckBox状态更改事件的服务器端名称是什么)。
所以我遇到了同样的问题。 我很好奇,在您的页面加载中,您是否在检查它是否是回发?
if(!Post.IsPostBack){
//normal page load
}
如果您没有该检查,它将调用您的页面加载逻辑,就我而言,每次使用我的数据对象重置复选框。
在复选框上的 aspx 上 OnCheckedChanged="ckbNameOfCheckbox_CheckedChanged" AutoPostBack="true"
在代码隐藏中
受保护的子ckbNameOfCheckbox_CheckedChanged(发送方作为对象,e 作为事件参数)
Dim chkBox As CheckBox = CType(sender, CheckBox)
' Gets the item that contains the CheckBox object.
Dim item As ListViewDataItem = CType(chkBox.Parent, ListViewDataItem)
NameOfTheListView.UpdateItem(item.DisplayIndex, sender.Checked)
End Sub