2011-10-04 98 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