2013-06-26 31 views
2

我有一個屬於4個不同類別的16張桌子,可以說是蘋果,橘子,草莓和櫻桃。使用枚舉設置元素的可見性?

我試圖添加一個單選按鈕的過濾器,根據您選擇過濾的水果(所有水果可見爲默認),將可見性設置爲真/假。

到目前爲止我有;

我的枚舉:

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 

而且年初我eventhandler:

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來解決這個問題,並且手動地逐個設置它們對單選按鈕的可見性。但是這似乎是過度的工作。我也不能改變選項卡的順序來使用某種包裝,因爲它們需要按照一定的順序。

而我試圖解決這個正確的方式?如果是的話我怎麼把這件事:(任何幫助感激!

回答

0

好吧,讓我發現了有沒有簡單的方法來做到這一點。最後,我不得不設置ID對我所有的桌子和th我使用相同的枚舉來設置開關情況下的可視性。

然而,在我半途而廢的情況下,我遇到了按位運算符的枚舉標誌,它使整個事情變得更簡單。病在這裏提交我的代碼爲別人用了同樣的問題:

[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

我猜FilterChoice是變量保存的值。

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

這半工作。畢竟,我在所有表中添加了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... 
} 

我想你看這樣的事情,我希望它能幫助。