将枚举类型的数据绑定到控件

                   将枚举类型的数据绑定到控件

.NET Framework中的数据绑定有几个很酷的功能。你不仅可以将集合、数组、DataTable和DataView对象绑定到列表绑定(list-bound)的控件(如DataGrid和ListBox),你还可以用枚举(enum)类型。该功能很有用,尤其将它用于自定义的枚举时。自定义的枚举代表了一个应用程序特定模块的许多逻辑上相关的选项。


一个枚举包含一组指定的常量和它们的值。缺省情况下,枚举中值的类型是Int32,但你可以在声明时设置它的类型。.NET Framework Enum类提供了一些基本的功能, enum实例可以让应用程序使用这些功能。其中的一个功能就是把一个值转换成它代表的字符串。这个人们期待已久的功能就使我们可以很快地把值转换成指定的常量。你可以在一个特殊的enum值上调用ToString方法来转换一个值。


Enum类也提供了GetValues方法,它把enum类型的内容转换成一个数组。在内容呈现为一个数组后,你就可以很容易地把它绑定到任何数据绑定的控件了。在C#中,你通过下面的代码用MissingSchemaAction enum的值来填充一个下拉列表:

dropList.DataSource =
            Enum.GetValues
            (typeof(MissingSchemaAction));
            

下面是用Visual Basic .NET代码完成同样的事情:

dropList.DataSource = _
            Enum.GetValues _
            (GetType(MissingSchemaAction))
            

GetValues方法创建了一个对象数组,并用枚举的值来填充它。当你把对象绑定到一个控件时,ToString方法自动将它们呈现为文本。结果,你的下拉列表就填充了构成enum类型的指定的常量。



你可以用一个类似的工具获得数据绑定的控件的值。在下面的例子中,你将Parse方法用于Enum类。GetValues和Parse都是静态的方法:

MissingSchemaAction msa;
            msa = (MissingSchemaAction) Enum.Parse(
            typeof(MissingSchemaAction),
            dropList.SelectedItem.ToString()
            );
            

在VB.NET中代码是这样的:

Dim msa As MissingSchemaAction
            msa = CType( _
            Enum.Parse(GetType( _
            MissingSchemaAction), _
            dropList.SelectedItem.ToString(), _
            MissingSchemaAction)
            

Parse方法接受枚举类型和代表特殊元素的常量的名字。它返回一个代表根本类型的值的对象。例如,设想你有下面这样的一个C#枚举:

enum MissingSchemaAction : Int32
            {
            Add = 1,
            Ignore = 2,
            Error = 3,
            AddWithKey = 4
            }
            

现在,将这个调用指令传送到Parse:

Enum.Parse(typeof(MissingSchemaAction),
            "Add");
            

结果就是与指定的常量相关的整数值——就是1。这个值是以原来的形式返回的——Int32或其它类型——而不是以enum类型的值返回的。如果你想让这个值是枚举的一个部分,可以将返回的值转换成enum类型。

在VB.NET中你用下面的代码声明一个枚举:

Enum MissingSchemaAction As Int32
            Add = 1
            Ignore = 2
            Error = 3
            AddWithKey = 4
            End Enum
            

posted on 2007-11-09 14:48  GIS云中飞鹏  阅读(940)  评论(1编辑  收藏  举报

导航