首页 > 代码库 > DataGridView绑定数据源

DataGridView绑定数据源

      给DataGridView绑定数据源比较简单,方法主要有两种:

1、直接在控件属性中绑定数据源,这种方法最简单,但它是直接连接数据库的,这样就和传DataTable的后果差不多了,所以还是尽量避开吧。

2、通过代码将实体集合作为DataGridView的数据源,现在以《增加删除用户》窗体为例来简单介绍下

窗体界面

      功能介绍:当用户级别改变时,表格控件中显示该用户级别的用户信息

 

      编辑控件:右击控件选中“添加列”——进行列的添加和编辑,编辑时需要用的只有三个

 

      (1)是列名,这个可改可不改(2)是与实体中对应的属性名称(3)是表头信息,这三个也可以在代码中写。如果不设置Name属性,在加载数据的时候将自动改为作为数据源的实体的属性名,在删除不需要字段的时候可以用得着。

U层代码

    Private Sub cboLevel_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboLevel.SelectedIndexChanged
        Dim euserIn As New E_UserInfo
        Dim bselectUser As New B_AddRemoveUser
        Dim userList As New List(Of E_UserInfo)
        'Dim userBindList As New BindingList(Of E_UserInfo)             '将BindingList作为数据源遇到问题,先省略

        euserIn.Level = cboLevel.GetItemText(cboLevel.SelectedItem)     '获取用户级别组合框的当前文本,并传递给E层
        userList = bselectUser.SelectUserInfo(euserIn)                  '将查询到的信息保存在euserStore中

        '如果集合中没有记录,退出该过程
        If userList.Count = 0 Then
            Exit Sub
        End If

        dtgUserInfo.AutoGenerateColumns = False             '不允许自动添加列
        dtgUserInfo.DataSource = userList                   '把泛型集合当做DataGridView的数据源

        '删除不需要显示的字段
        dtgUserInfo.Columns.Remove("Password")
        dtgUserInfo.Columns.Remove("Level")

        '将DataGridView的标题改为中文,在控件属性中已经设置,这里就可以省去了
        'dtgUserInfo.Columns(0).HeaderText = "用户名"
        'dtgUserInfo.Columns(1).HeaderText = "姓名"
        'dtgUserInfo.Columns(4).HeaderText = "开户人"

    End Sub

B层代码

Imports Entity.entity
Imports DAL.dal
Imports System.Collections
Public Class B_AddRemoveUser
    Public Function SelectUserInfo(ByVal user As E_UserInfo) As IList
        Dim userList As New List(Of E_UserInfo)
        Dim dUser As New D_UserDAO

        userList = dUser.SelectUserInfo(user)       '将用户信息传入D层

        Return userList                             '返回用户信息
    End Function

    Public Function DeleteUser(ByVal user As E_UserInfo) As Boolean
        Dim dUser As New D_UserDAO
        Return dUser.deleteUser(user)       		'返回数据库删除用户是否成功
    End Function
End Class

D层代码

    Public Function SelectUserInfo(ByVal user As E_UserInfo) As IList
        Dim mySqlHelper As New SqlHelper        '实例化SqlHelper
        Dim dt As New DataTable                 '定义一个DataTable数据表
        Dim cmdText As String = "Select UserID, UserName, Operator From T_UserInfo Where Level=@Level"
        Dim paras As SqlParameter() = {New SqlParameter("@Level", user.Level)}  '将参数传入SqlHelper
        dt = mySqlHelper.ExecSelect(cmdText, CommandType.Text, paras)           '执行查询

        Dim myList As New List(Of E_UserInfo)                       '定义一个集合用来保存转化后的泛型集合
        myList = ConvertHelper.ConvertToList(Of E_UserInfo)(dt)     '调用实体转换类,将DataTable转换为泛型集合

        Return myList           		'返回实体集合
    End Function

       这样就是能用DataGridView显示我们需要的信息了,这种方法容易忽略导致出错的地方有两个:1、数据库表中的字段名和实体中的属性名不一样。2、实体的属性名和DataGridView中自定义的数据名不一样。如果是因为第2种出错,那只能说太粗心了。现在给出第1种的解决方法,先假设一个情景:数据库表中“用户名”的字段名是“UserNo”,实体中相应的属性名是“UserID”,这样就导致了信息不匹配的问题,所以需要转化一下,最简单的就是利用As把上边D层的查询代码改为

      "Select  UserNo As UserID , UserName, Operator From T_UserInfo Where Level=@Level"

      As对数据库字段的转换功能非常有意思,本来想用数据库演示一下的,只是SQL软件还没好就算了吧……

 

 

 

 

 

DataGridView绑定数据源