vb.net:DataGridView控件显示数据库字段内容时,根据枚举类型“翻译”成相应字符串

来源:互联网 发布:抓取访客手机号源码 编辑:程序博客网 时间:2024/06/08 12:38

题外话:网上关于VB.NET的资料实在太少,难道所有程序员都奔C#去了?不解中…. 很多时候只好看C#的,很吃力…还有一个办法就是看国外网站的资料,更吃力…

用户在执行数据库查询操作时,流程一般是:SqlDataAdapter从数据库中获取数据,并将其用Fill方法存储在DataSet中,然后将DataGridView控件的数据源绑定为DataSet,即可将查询结果显示出来,整个过程只需要几条语句而已,这正是ADO.NET的优点之一。

但是有时候,需要对个别字段进行处理,例如:需要在数据库中检索所有报警事件,有一个字段“Status”是报警器状态,值为一个字(Word),每个位(Bit)代表不同含义,需要在显示时“翻译”过来,那么该怎么做呢?

这就需要用到VB.NET提供的枚举类型,这是VB6没有的新特性,这个枚举实际上相当于数值常量,与单独的常量不同的是,枚举常量是有范围的,并且可以做与、或、非运算。

Private Enum ALARMSTATUSSTRUCT As UInt16 '占一个字(WORD)或双字节    wIsInited = 1    wIsActive = 2    wIsIgnored = 4    wIsAlarming = 8    wAlarmType = 4080 '占8位,此处未用    wUnused = 61440 '占最高4位,此处未用End Enum

定义好枚举类型,利用DataGridView的CellFormatting方法在绘制列表的时候,更改字段值:

Private Sub DataGridView1_CellFormatting(sender As Object, _e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) _    Handles DataGridView1.CellFormatting        Dim StatusType As String = vbNullString        If e.ColumnIndex = 2 Then '如果是第3列            Dim StatusValue As UInt16 = Convert.ToUInt16(e.Value)            Try                If StatusValue And ALARMSTATUSSTRUCT.wIsInited Then                    StatusType &= "未初始化,"                Else                    StatusType &= "已初始化,"                End If                If StatusValue And ALARMSTATUSSTRUCT.wIsActive Then                    StatusType &= "已撤防,"                Else                    StatusType &= "已设防,"                End If                If StatusValue And ALARMSTATUSSTRUCT.wIsIgnored Then                    StatusType &= "已强制取消,"                End If                If StatusValue And ALARMSTATUSSTRUCT.wIsAlarming Then                    StatusType &= "正在报警,"                End If                e.Value = StatusType.Substring(0, StatusType.Length - 2)  '去掉字符串最后的逗号            Catch ex As Exception                e.Value = ex.Message  '出错则显示出错信息            End Try        End If    End Sub

这样当DataGridView填充数据时,同步更改第3列的值,根据枚举定义更换为字符串描述。

0 0
原创粉丝点击