2010-02-15 3 views
0

데이터리스트가있는 간단한 usercontrol과 체크 박스가 있습니다.usercontrol의 체크 박스는 확인되지 않습니다.

Public Sub CheckRole(ByVal role As Integer) 
    For Each dliOrganisme As DataListItem In Me.DataListOrganismes.Items 
     Dim DataListDroits As DataList = dliOrganisme.FindControl("DataListDroits") 
     If DataListDroits IsNot Nothing Then 
      For Each dliDroit As DataListItem In DataListDroits.Items 
       If role = CInt(CType(dliDroit.FindControl("HiddenFieldDroitID"), HiddenField).Value) Then 
        Dim CheckBoxDroit As CheckBox = dliDroit.FindControl("CheckBoxDroit") 
        CheckBoxDroit.Checked = True 
       End If 
      Next ' DataListDroits 
     End If 
    Next ' DataListItem 
End Sub 

그리고 호출하는 웹 양식의를 Page_Load에서 :

<asp:DataList ID="DataListDroits" runat="server" DataKeyField="droit_id" DataSourceID="SqlDroits"> 
     <ItemTemplate> 
      <asp:HiddenField ID="HiddenFieldDroitID" runat="server" Value='<%# Eval("droit_id") %>' /> 
      <asp:CheckBox ID="CheckBoxDroit" runat="server" Text='<%# Eval("droit_label") %>' /> 
     </ItemTemplate> 
</asp:DataList> 

은 내가 UserControl을 뒤에 코드를 사용하여 확인

  Dim CheckBoxesRoles1 As ASP.organisme_checkboxesroles_ascx = Me.FormViewRubrique.FindControl("CheckBoxesRoles1") 
      Dim rolesCoches As New List(Of Integer) 
      Dim cmdRoles As New SqlCommand("SELECT droit_id FROM o_droit_rubrique WHERE rubrique_id = @rubrique", conn) 
      cmdRoles.Parameters.AddWithValue("rubrique", Request.QueryString("rid")) 
      Dim rdrRoles As SqlDataReader = cmdRoles.ExecuteReader 
      While rdrRoles.Read 
       CheckBoxesRoles1.CheckRole(rdrRoles("droit_id")) 
      End While 
      rdrRoles.Close() 

... 그럼에도 불구하고, 그들은 확인하지 않습니다 .
하지만 내가 할 경우이 :

Protected Sub Page_LoadComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadComplete 
    Dim CheckBoxesRoles1 As ASP.organisme_checkboxesroles_ascx = Me.FormViewRubrique.FindControl("CheckBoxesRoles1") 
    If CheckBoxesRoles1 IsNot Nothing Then 
     For Each role As Integer In CheckBoxesRoles1.CheckedRoles 
      Response.Write("role : " & role & "<br>") 
     Next 
    End If 
End Sub 

나는 그들이 나에게 말한다 ...

는 여기 미친거야! 그들이 분명히 검사하지 않는 동안 검사를 받았다고 말하는 이유는 무엇입니까?

답변

0

음 ... 한 가지만 생각해 보면 체크 박스가 선택되어 있는지 확인하지 않고 "역할"값만 출력하고있는 것입니다. 정확히 여기서 뭘 기대하고 있니?

두 가지 제안 : 1)과 같이 영문에서 체크 박스 Checked 속성을 설정합니다

<asp:CheckBox ID="CheckBoxDroit" runat="server" Text='<%# Eval("droit_label") %>' Checked='<%# (Eval("droit_id") > 0).ToString()' /> 

2) 두 가지의 코드 숨김

하나는에 OnItemDataBound의 속성을 설정 실행 중 : 예상되는 코드가 실제로 실행되지 않습니다 (즉, if 블록이 사실입니까? 컨트롤이 발견되지 않습니까? 중단 점을 시도합니까?) 또는 잘못된 시간에 페이지를 수행 한 것입니다. 이미 렌더링되었습니다.

+0

- 각 역할에 대해 정수로 As CheckBoxesRoles1.CheckedRoles는 컨트롤의 체크 된 모든 체크 상자를 반복합니다. 따라서 "role : x"를 쓰면 체크 박스가 선택되었음을 의미합니다. - 내가 제안한대로 할 수는 없지만 단지 적용되지 않습니다. - 중단 점은 코드가 내가 원하는 모든 곳으로 이동한다는 것을 알려줍니다. 다른 이벤트에서 "체크 박스"코드를 실행하려고합니다. 어쩌면, 당신이 제안한 것처럼, 그들은 페이지 수명주기에서 너무 늦게 체크되어 졌을 것입니다. – thomasb

관련 문제