我有一个包含复选框字段的表单。在页面加载时,我想为我的数据库中的每个客户创建一个单独的复选框。我必须为每个客户创建复选框的代码工作正常。但是,我还想检查数据库中是否有客户设置为未经授权,如果他们那么我想在那里检查框。我还有用户检查框的情况的代码。如果选中一个框,我更新数据库,将未授权属性设置为true。我的问题是当我检查一个盒子它工作正常并且盒子被检查,但是如果我重新加载页面所有的盒子都未选中。因此,我的数据库更新不是更新数据库,也不是我检查页面加载方式的复选框是不正确的。有什么想法吗?
asp复选框字段的代码:
<asp:CheckBoxList id="check1" AutoPostBack="True" TextAlign="Right" OnSelectedIndexChanged="Check" runat="server">
</asp:CheckBoxList>
页面加载代码:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim sql As String = "SELECT Name, unauthorized, ID FROM Customer ORDER BY Name"
Dim dt As DataTable = db.execDataTableQuery(sql, "Customer")
Dim i As Integer
For i = 0 To dt.Rows.Count - 1
check1.Items.Add(New ListItem(CStr(dt.Rows(i).Item("Name"))))
check1.Items(i).Value = CInt(dt.Rows(i).Item("ID"))
check1.Items(i).Text = CStr(dt.Rows(i).Item("Name"))
If CInt(dt.Rows(i).Item("unauthorized")) = 1 Then
check1.Items(i).Selected = 1
Else
check1.Items(i).Selected = 0
End If
Next
End Sub
更新数据库的代码:
Sub Check(ByVal sender As Object, ByVal e As EventArgs)
Dim sql As String
If check1.SelectedItem.Selected = 1 Then
sql = "UPDATE Customer SET unauthorized = 1 WHERE ID = @ID"
db.execUpdateQuery(sql, New SqlClient.SqlParameter("@ID", check1.SelectedItem.Value))
Else
sql = "UPDATE Customer SET unauthorized = 0 WHERE ID = @ID"
db.execUpdateQuery(sql, New SqlClient.SqlParameter("@ID", check1.SelectedItem.Value))
End If
End Sub
End Class
答案 0 :(得分:1)
你需要在Not Page.IsPostback
的Page_Load中包装你的代码,否则在回发时不会触发任何事件,并且由于你从数据库中覆盖它而导致选择丢失。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostback Then
' databind your CheckBoxList '
End If
End Sub