2013-06-26 5 views
2

나는 4 개의 다른 카테고리에 속하는 16 개의 테이블을 가지고 있으며, 사과, 오렌지, 딸기 및 체리라고 말할 수 있습니다.enum을 사용하여 요소의 가시성을 설정 하시겠습니까?

필터를 선택한 과일에 따라 표시 여부를 true/false로 설정하는 라디오 버튼이 추가되었습니다 (모든 과일이 기본값으로 표시됨).

지금까지 내가 가지고있는;

내 열거 :

public enum FilterState 
    { 
     AllFruits, 
     Apples, 
     Oranges, 
     Strawberries, 
     Cherries 
    } 

내 재산

public FilterState FilterChoice 
    { 
     get { return (FilterState)(ViewState["filterChoice"] ?? FilterState.All); } 
     set { ViewState["filterChoice"] = value; } 
    } 

표 (그들이 떨어져 다른 과일에서 같은 모양) :

<table FilterState="Apples" runat="server" Visible="false"> 
     ... 
</table 

그리고의 시작 내 이벤트 핸들러 :

void filterPolicyBtn_Click(object sender, EventArgs e) 
    { 

     switch (FilterChoice) 
     { 
      case FilterState.AllFruits: 

       //How can i set the states to visible? 
       Visible = true; 
       break; 

      case FilterState.Apples: 

       break; 

      case FilterState.Oranges: 

       break; 

      case FilterState.Strawberries: 

       break; 

      case FilterState.Cherries: 

       break; 
     } 

나는 16 개의 서로 다른 ID를 가지고 수동으로 하나씩 라디오 버튼에 대한 가시성을 설정하여이를 해결할 수 있음을 알고 있습니다. 그러나 그것은 과도한 작업처럼 보입니다. 또한 특정 순서로 있어야하기 때문에 일종의 래퍼를 사용하도록 탭의 순서를 변경할 수 없습니다.

그리고 나는 이것을 올바르게 해결하려고합니까? 그렇다면 내가 마무리 할 수있는 방법이 어떤 도움이 감사 :(! 내가 FilterChoice이 값을 유지하는 변수입니다 추측하고있어

답변

0

좋아, 그래서 나는이 작업을 수행 할 수있는 쉬운 방법은 없다 발견했다. 결국 나는에 ID 년대를 설정했다 내 모든 테이블과 일 스위치 케이스에서 동일한 열거 형을 사용하여 가시성을 설정했습니다.

그러나 중간에 비트 연산자를 사용하여 열거 형 플래그가 나타 났으며 모든 것이 훨씬 간단 해졌습니다. 내가 가시성의 설정 단축 도움말 클래스 만든이 옆에

[Flags] 
    public enum FilterState 
    { 
     Apples = 1, 
     Oranges = 1 << 1, 
     Strawberries = 1 << 2, 
     Cherries = 1 << 3, 
     AllFruits = (1 << 4) - 1 
    } 

(필요하지,하지만 언급 등 상당히 코드를 단축) : 병이 같은 문제를 가진 다른 사람 여기 내 코드를 제출

public static class TestExtension 
{ 
    public static bool HasFlag(this FruitClass.FilterState e1, FruitClass.FilterState e2) 
    { 
     return ((e1 & e2) == e2); 
    } 
} 

그리고 "모든"이었다 필요하다는 정렬 버튼을위한 이벤트 및 필터 기능 :

private void Filter(FilterState filter) 
    { 
     ApplesA.Visible = ApplesB.Visible = ApplesC.Visible = filter.HasFlag(FilterState.Apples); 
     OrangesA.Visible = OrangesB.Visible = OrangesC.Visible = OrangesD.Visible = filter.HasFlag(FilterState.Oranges); 
     StrawberriesA.Visible = StrawberriesB.Visible = StrawberriesC.Visible = StrawberriesD.Visible = filter.HasFlag(FilterState.Automation); 
     CherriesA.Visible = CherriesB.Visible = CherriesC.Visible = filter.HasFlag(FilterState.Cherries); 

    } 

    private void filterPolicyBtn_Click(object sender, EventArgs e) 
    { 
     var filter = FilterState.All; 

     if (ApplesCheck.Checked) filter = FilterState.Apples; 
     if (OrangesCheck.Checked) filter = FilterState.Oranges; 
     if (StrawberriesCheck.Checked) filter = FilterState.Automation; 
     if (CherriesCheck.Checked) filter = FilterState.Cherries; 

     Filter(filter); 

    } 

    private void ShowAll_Click(object sender, EventArgs e) 
    { 
     Filter(FilterState.All); 
    } 
  • Cammy 밖으로
0

.

// Replace apples with the appropriate enumeration 
Visible = FilterChoice == FilterState.AllFruits || 
      FilterChoice == FilterState.Apples; 
+0

그 semi-works. 나는 모든 테이블에 ID를 추가했으며 비트 문자로 열거 형 플래그를 사용하고 있습니다. – Cammy

0

나는대로 내가 제대로 이해한다면 모르겠지만, ...

public enum FilterState 
{ 
    Apples = 1, 
    Oranges, 
    Strawberries, 
    Cherries, 
    Total 
} 
public void FilterChoice (int value) 
{ 
    int counter = 1; 
    for (int i = 1; i < Total; i++) 
     if (value & (counter << i)) 
      //actions to do if value is set 
     else 
      //actions if not set... 
} 

생각 난 당신이 뭔가를 찾고 생각, 나는 그것이 도움이되기를 바랍니다.

관련 문제