2012-06-13 125 views
0

我的页面上有一个CheckBoxList,表现不太好。CheckBoxList.Selected不断返回False值

这个想法是,一旦点击了表单上的提交按钮,应用程序应清除与特定用户有关的所有行的数据库表,然后根据用户的CheckBoxList选择重新插入新的数据库表。

问题是,无论是否选中CheckBoxList中的任何(或全部)项目,应用程序都会收到Selected = False

这里是我的代码:

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load 

    loadRegions() 
End Sub 

Private Sub loadRegions() 

    Dim db As New Database 

    Dim sql As String = "select * from regions" 

    Dim dr As MySqlDataReader = db.execDB(sql, "Text", Nothing, "DataReader", False) 

    If dr.HasRows Then 

     cblRegion.DataSource = dr 
     cblRegion.DataTextField = "regionname" 
     cblRegion.DataValueField = "regionid" 
     cblRegion.DataBind() 
    End If 

    dr.Close() 
End Sub 

Protected Sub btnRegister_Click(sender As Object, e As System.EventArgs) Handles btnRegister.Click 
     ' ============================================================ 
     ' There's more code in here, but it's irrelevant to this paste 
     ' ============================================================ 

     Dim sql As String = "delete from userregions where userid = " & lblUserID.Text & ";" 

     For i As Integer = 0 To cblRegion.Items.Count - 1 
      If cblRegion.Items(i).Selected Then 
       sql &= "insert into userregions (userid, regionid)" & _ 
        "values(" & UserID & ", " & cblRegion.Items(i).Value & ")" 

       db.execDB(sql, "Text", Nothing, "None", False) 
      End If 
     Next 
End Sub 

为了记录
我知道SQL注入这里的潜力。只要我有循环工作,我会尽快使用参数。

谢谢你的时间。 任何帮助将不胜感激。

回答

1

你只需要调用​​初始负载,而不是回发:

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
    If Not Page.IsPostBack Then 
     loadRegions() 
    End If 
End Sub 

否则你会失去改变的值和事件不会被触发。

+0

哦,为了上帝的缘故......我一直盯着这个近一个小时,从来没有打扰检查......谢谢! – Ortund

1

在加载页面,写上如下:

If Not IsPostBack 
    loadRegions() 
End If 
1

加入这一行copde的 “如果的IsPostBack然后返回” 在Page_Load方法。

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
    If IsPostBack Then Return 
    loadRegions() 
End Sub 
+0

我对这个答案的简单性感到相当尴尬......事实是,我从来没有想过,数据绑定应该在回发中...猜猜我的大脑决定我可以承受跳过那一步 – Ortund

+0

它发生了很多我们也开始用.Net编写代码。我无法弄清楚数据总是以第一个或默认值存储。 –