Access不可更新数据表子窗体:绑定列值复制到未绑定复选框异常
解决Access子窗体未绑定复选框同步每行Confirmed值的问题
问题分析
你的子窗体基于不可更新的存储过程,直接给未绑定复选框ConfirmedCopy设默认值或一次性赋值时,所有行都会显示第一行的Confirmed值——这是因为连续窗体/数据表视图里的未绑定控件是全局共享实例,只会初始化一次值,不会随每行记录切换自动更新。
解决代码步骤
1. 初始化每行状态数组
在子窗体的Form_Load事件中,把存储过程返回的所有Confirmed值存入数组,保留每行的初始状态:
Dim arrConfirmed() As Boolean Dim rs As Recordset Private Sub Form_Load() Set rs = Me.RecordsetClone ReDim arrConfirmed(rs.RecordCount - 1) rs.MoveFirst Dim i As Integer For i = 0 To rs.RecordCount - 1 arrConfirmed(i) = rs!Confirmed rs.MoveNext Next i rs.Close Set rs = Nothing End Sub
2. 每行显示时同步复选框值
利用Form_Format事件(每行显示时触发),根据当前行位置从数组中取对应值赋值给ConfirmedCopy:
Private Sub Form_Format(Cancel As Integer, FormatCount As Integer) If Me.CurrentRecord > 0 And Me.CurrentRecord <= UBound(arrConfirmed) + 1 Then Me.ConfirmedCopy = arrConfirmed(Me.CurrentRecord - 1) End If End Sub
3. 保存用户修改的状态
如果需要保留用户点击复选框后的修改,在ConfirmedCopy_Click事件中更新数组对应位置的值:
Private Sub ConfirmedCopy_Click() If Me.CurrentRecord > 0 And Me.CurrentRecord <= UBound(arrConfirmed) + 1 Then arrConfirmed(Me.CurrentRecord - 1) = Me.ConfirmedCopy End If End Sub
验证效果
设置完成后,子窗体每行的ConfirmedCopy会对应显示该行的Confirmed初始值,用户点击修改后切换行也能保留修改状态,符合你的期望效果。
内容的提问来源于stack exchange,提问作者sasos
相关产品推荐
相关产品推荐

