2012-12-04 3 views
1

이 C# 코딩을 처음 사용합니다. 확인란을 사용하여 코드를 작성하려고합니다. 다음은 디자인 코드 C# 확인란이 작동하지 않습니다.

<table> 
    <tr> 
     <td align="right"> 
      <asp:Label ID="lblOwn" runat="server" Text="Owned by You :"></asp:Label> 
     </td> 
     <td align="left"> 
      <asp:CheckBoxList ID="chbxOwn" runat="server" 
       OnSelectedIndexChanged="onAckTypeChanged3" AutoPostBack="true"> 
       <asp:ListItem>2 wheeler</asp:ListItem> 
       <asp:ListItem>4 wheeler</asp:ListItem> 
      </asp:CheckBoxList> 
     </td> 
    </tr> 
    <tr> 
     <td align="right"> 
      <asp:Label ID="Label1" runat="server" Text="2 w"></asp:Label> 
     </td> 
    </tr> 
    <tr> 
     <td align="right"> 
      <asp:Label ID="Label2" runat="server" Text="4 w"></asp:Label> 
     </td> 
    </tr> 
</table> 

흐름이며, 다음은 "2 륜"확인란이 선택되어 코드 숨김

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Hid1(); 
     Hid2(); 
    } 
    protected void onAckTypeChanged3(object sender, EventArgs e) 
    { 
     if (chbxOwn.SelectedItem.Text == "2 wheeler") 
     { 
      Vis1(); 
     } 
     if (chbxOwn.SelectedItem.Text == "4 wheeler") 
     { 
      Vis2(); 
     } 
    } 
    private void Hid1() 
    { 
     Label1.Visible = false; 
    } 
    private void Hid2() 
    { 
     Label2.Visible = false; 
    } 
    private void Vis1() 
    { 
     Label1.Visible = true; 
    } 
    private void Vis2() 
    { 
     Label2.Visible = true; 
    } 
} 

입니다 라벨 "w 2"를 볼 수 있습니다. 하지만 "4 wheeler"를 확인하면 doesnot 두 레이블을 보여줍니다. 나는 내가 실수를 저지르고 있는지 알고 싶다. 또한 확인란을 모두 선택 취소하면 Null 참조 예외가 생성됩니다.

이 문제로 나를 도와주세요 1. 확인란을 모두 선택하면 두 레이블이 모두 표시되어야합니다. 2. 선택 취소는 null 참조 예외를 생성해서는 안됩니다. 사전 감사에서

감사하는 CheckBoxList에서 선택한 항목을 결정하기 위해 Items 속성을 사용하는 방법에 대한 예를 들어 ListControl에서 Abhishek

+0

당신이 그것을 몇 번 더 테스트 할 수 있습니다 따라 등 다른 순서를 확인으로 onAckTypeChanged3 이벤트를 수정 : 여기

는 작업 데모입니까? –

+0

"4 휠러"에 체크하면 두 체크 박스가 모두 선택되어 있습니까? –

+0

@SamIam : 나는 그들을 다른 순서대로 검사했다. 첫 번째 검사 2 wheeler -> 2 w 레이블을 보여줍니다. 4 휠러 점검 -> 2 w를 감추고 4 w를 보여줍니다. 이 시점에서 두 확인란이 선택됩니다. 4 wheeler -> 2 w 레이블을 선택 취소하면됩니다. 모두 선택 해제 후 null 참조 예외 –

답변

1

이 당신이 원하는 무엇인가 :

protected void onAckTypeChanged3(object sender, EventArgs e) 
{ 
    foreach (ListItem item in chbxOwn.Items) 
    { 
     if (item.Text == "2 wheeler" && item.Selected) 
     { 
      Vis1(); 
     } 
     if (item.Text == "4 wheeler" && item.Selected) 
     { 
      Vis2(); 
     } 
    } 
} 

그것은 마법처럼 작동합니다 .. !! DEMO

1

봐. SelectedItem 속성은 가장 낮은 인덱스를 가진 항목을 반환합니다. 항목을 선택하지 않으면 SelectedItem이 null을 반환하므로 null 참조 예외가 발생합니다.

1

protected void onAckTypeChanged3(object sender, EventArgs e) 
     { 
      foreach (ListItem checkBoxItem in chbxOwn.Items) 
      { 
       if (checkBoxItem.Selected == true) 
       { 
        if (checkBoxItem.Text == "2 wheeler") 
        { 
         Vis1(); 
        } 
        if (checkBoxItem.Text == "4 wheeler") 
        { 
         Vis2(); 
        } 
       }     
      }    
     } 
관련 문제