2011-10-04 102 views
0

我有一個枚舉和一個用戶控件,無論是在相同的組件(一個普通的.NET 4網站)。枚舉在VB.NET

在常量類:

public Enum CrudOperations 
    Add 
    Edit 
    Delete 

這通過在用戶控件

Public Property Mode() As CrudOperations 
     Get 
      Return [Enum].Parse(GetType(CrudOperations), If(ViewState.Item("Mode"), "0"), True) 
     End Get 
     Set(ByVal value As CrudOperations) 
      ViewState.Item("Mode") = value 
      grdItems.Columns(3).Visible = ((value Or CrudOperations.Add) = CrudOperations.Add) 
      grdItems.Columns(4).Visible = ((value Or CrudOperations.Edit) = CrudOperations.Edit) 
     End Set 
End Property 

在C#中的屬性控制在一個用戶控件一個GridView列,我指定的列以標記顯示爲Mode="Edit,Delete",但在VB.NET中,這沒有任何作用。我能得到什麼可以炫耀的唯一方法是使用代碼隱藏,但如果包含頁面上我用userGrid.Mode = CrudOperations.Edit And CrudOperations.Delete,我得到的所有列(還有一個刪除列),但userGrid.Mode = CrudOperations.Edit Or CrudOperations.Delete說明不了什麼。

有沒有辦法做C#的等價物?

回答

1

您需要使用Flags屬性,其中一個枚舉可以被當作一個位字段。

C#:

[Flags] 
public enum CrudOperations 
{ 
    Add, 
    Edit, 
    Delete 
} 

userGrid.Mode = CrudOperations.Edit | CrudOperations.Delete; 

VB.NET:

<Flags> _ 
Public Enum CrudOperations 
    Add 
    Edit 
    Delete 
End Enum 

Private test As CrudOperations = CrudOperations.Edit Or CrudOperations.Delete 
+1

可選地(在VB.NET反正),可以只分配在和Base2的值:添加= 1,編輯= 2,刪除= 4,然後使用邏輯AND和邏輯或,或者添加:userGrid.Mode = Edit + Delete。 – HardCode

+0

Thatnks。我想這是續行字符。要檢查標誌設置,然後需要使用'((值與CrudOperations.Edit)= CrudOperations.Edit)' – Echilon