最近在研究机房收费系统的组合查询的方法时,看到了ComboBox控件可以进行数据绑定,我觉得这个功能真的很不错,可以给我省去很多的麻烦。
下面是我组合查询窗体界面
一、数据转换方法
现在我们开看一下我以前写的一段代码:
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、数据库表的字段
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与其数据库绑定的原理都是相通的,相信大家都可以举一反三也。