最近在研究机房收费系统的组合查询的方法时,看到了ComboBox控件可以进行数据绑定,我觉得这个功能真的很不错,可以给我省去很多的麻烦。

 

下面是我组合查询窗体界面

ComboBox控件绑定数据源_taro

一、数据转换方法

现在我们开看一下我以前写的一段代码:

1、在界面初始化的时候向ComboBox中添加数据

 

   ''' <summary>
    ''' 添加界面
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub frmQueryUserWorklog_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        '向字符中添加数据
        cboFields1.Items.Add(" ")
        cboFields1.Items.Add("操作用户")
        cboFields1.Items.Add("注册日期")
        cboFields1.Items.Add("注册时间")
        cboFields1.Items.Add("注销日期")
        cboFields1.Items.Add("注销时间")
        cboFields1.Items.Add("操作电脑")
        cboFields1.DropDownStyle = ComboBoxStyle.DropDownList
        cboFields1.SelectedIndex = 0                                                                                                                           End Sub

 

2、对文本框中的内容进行数据转换

 

    ''' <summary>
    ''' 改变用户工作记录字符串
    ''' </summary>
    ''' <param name="strUserInfo   ">匹配用户信息</param>
    ''' <returns>strUser,返回匹配用户信息的字符串</returns>
    ''' <remarks></remarks>
    Public Function ChangeUserFields(ByVal strUserInfo As String) As String      
        '返回用户字符   
        Dim strUser As String
        Select Case strUserInfo
        Case "操作用户"
             strUser = "UserNo"
        Case "注册日期"
             strUser = "LoginDate"
        Case "注册时间"
             strUser = "LoginTime"
        Case "注销日期"
             strUser = "LogoutDate"
        Case "注销时间"
             strUser = "LogoutTime"
        Case "操作电脑"
             strUser = "ComputerName"
        Case Else
             strUser = " "
        End Select

        Return strUser
    End Function

 

二、ComboBox控件绑定数据之自建数据表

现在看一下我现在所用方法的代码

 

  ''' <summary>
    ''' 添加界面
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub frmQueryUserWorklog_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        '设置cboFields的类型
        cboFields1.DrawMode = DrawMode.Normal
        cboFields1.DropDownStyle = ComboBoxStyle.DropDownList
        cboFields1.FlatStyle = FlatStyle.Flat

        '定义数据表
        Dim dt As DataTable = New DataTable
        dt.Columns.Add("Value")
        dt.Columns.Add("Name")

        '向第一行中添加数据
        Dim dr0 As DataRow = dt.NewRow
        dr0("Value") = "UserNo"
        dr0("Name") = "操作用户"
        dt.Rows.Add(dr0)

        '向第二行中添加数据
        Dim dr1 As DataRow = dt.NewRow
        dr1("Value") = "LoginDate"
        dr1("Name") = "注册日期"
        dt.Rows.Add(dr1)

        '向第三行中添加数据
        Dim dr2 As DataRow = dt.NewRow
        dr2("Value") = "LoginTime"
        dr2("Name") = "注册时间"
        dt.Rows.Add(dr2)

        '向第四行中添加数据
        Dim dr3 As DataRow = dt.NewRow
        dr3("Value") = "LogoutDate"
        dr3("Name") = "注销日期"
        dt.Rows.Add(dr3)

        '向第五行中添加数据
        Dim dr4 As DataRow = dt.NewRow
        dr4("Value") = "LogoutTime"
        dr4("Name") = "注销时间"
        dt.Rows.Add(dr4)

        '向第六行中添加数据
        Dim dr5 As DataRow = dt.NewRow
        dr5("Value") = "ComputerName"
        dr5("Name") = "电脑名称"
        dt.Rows.Add(dr5)

        '向cboFields中添加数据源
        cboFields1.DataSource = dt

        '在cboFields中ListControl中显示的属性
        cboFields1.DisplayMember = "Name"
        '在cboFields中ListControl中实际的属性
        cboFields1.ValueMember = "Value"
    End Sub

 

三、ComboBox控件绑定数据之数据库

1、数据库表的字段

ComboBox控件绑定数据源_添加数据_02

2、代码展示

 

''' <summary>
    ''' 添加界面
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub frmQueryUserWorklog_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'定义数据库字符
        Dim sqlConnectStr As String = "Data Source=" ";Initial Catalog=ComputerRoomCharge_sys;User ID=sa;Pwd=123456"
        '获得字符串连接
        Private ReadOnly strConnection As String = System.Configuration.ConfigurationManager.AppSettings("sqlConnectStr")
        '设置连接
        Dim conn As SqlConnection = New SqlConnection(strConnection)
        '定义命令
        Dim cmd As New SqlCommand
        '定义适配器
        Dim sqlAdapter As SqlDataAdapter
        '定义数据集
        Dim ds As New DataSet
        'sql语句
        Dim strSql As String = "select UserNo,UserName from T_UserInfo "
        '给cmd赋值
        cmd.CommandText = strSql
        cmd.CommandType = CommandType.Text
        cmd.Connection = conn
        sqlAdapter = New SqlDataAdapter(cmd)

        Try
            If conn.State = ConnectionState.Closed Then
                conn.Open()
            End If

            '填充数据集
            sqlAdapter.Fill(ds)

        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            Close(conn)
            Dispose(cmd)
        End Try


        cboFields1.DataSource = ds
        cboFields1.ValueMember = "Value"
        cboFields1.DisplayMember = "Name"
        cboFields1.SelectedIndex = 0
    End Sub

 

四、总结

1、对于上面提到的三种方法,我认为第一种方法还是不值得推荐的,因为对于此控件绑定数据的功能,有其自己的好处,即理解容易,有操作简单,不容易写乱。对于第二种和第三种方法就要根据具体情况而定了,如果数据库中没有自己想要绑定的数据就采用方法二、如果数据库中有自己想要绑定的数据就采用方法三。

2、对于数据库绑定也可以在其控件属性中按照提示可以进行逐步操作,我这里就不为大家演示了,大家可以自己去尝试一下。

3、对于数据源的绑定类型还包括服务、对象、SharePoint与其数据库绑定的原理都是相通的,相信大家都可以举一反三也。