DataGridView复选框默认设为true 取消勾选提交重载后恢复选中问题
问题描述
我在代码中为DataGridView控件配置了默认选中状态为true的复选框,相关实现代码如下:
Protected Sub dgvStudent_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgvStudent.DataBound Dim chkstudentid As CheckBox = CType(dgvStudent.Rows(10).Cells(1).FindControl("chkRequired"), CheckBox) chkstudentid.Checked = True
上述代码可正常实现初始默认选中效果,但存在异常:取消勾选该复选框、点击提交按钮并重新加载页面后,对应学生项的复选框会再次变为选中状态。需要补充什么代码,才能成功保存复选框的未勾选状态?
问题原因
dgvStudent_DataBound事件会在每次控件完成数据绑定时触发,包括提交触发的回发场景。当前代码没有区分首次加载和回发场景,每次绑定都会硬编码将复选框设为选中状态,直接覆盖了用户提交的未勾选选择。
解决方案
- 给默认选中的逻辑加回发判断,仅在页面首次加载时执行默认选中赋值,回发场景下不强行覆盖用户选择
- 提交操作时需要将用户修改后的勾选状态持久化到对应存储(数据库、ViewState、Session均可),后续非首次加载绑定时,从存储中读取真实状态赋值,不要硬编码写死选中值
- 查找控件后增加空值判断,避免控件未找到时触发空引用异常
修正后的代码参考:
Protected Sub dgvStudent_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgvStudent.DataBound ' 仅首次加载时设置默认选中,回发时跳过该逻辑 If Not IsPostBack Then Dim chkstudentid As CheckBox = CType(dgvStudent.Rows(10).Cells(1).FindControl("chkRequired"), CheckBox) If chkstudentid IsNot Nothing Then chkstudentid.Checked = True End If Else ' 回发场景下从持久化存储读取该学生的实际勾选状态赋值即可 ' 示例:chkstudentid.Checked = 从存储读取的对应状态值 End If End Sub
补充提示:如果提交后会重新执行全量数据绑定,务必在绑定逻辑执行前先把用户提交的勾选状态更新到数据源,避免绑定过程中丢失用户修改。
内容的提问来源于stack exchange,提问作者hash.f
相关产品推荐
相关产品推荐

