在上一篇文章中,说了一下使用DataGridView控件直接绑定数据源的做法,那样做虽然方便,但是有缺陷(详情请看上一篇文章)。现在,我将从使用实体类填充泛型集合,用泛型集合来传递数据的方法,来展示DataGridView如何显示数据的。
一、设置DataGridView控件
首先,插入DataGridView控件后,进行相应的设置:
注:设置时,4、5是特别需要注意的。数据DataPropertyName这里,必须要与实体的属性名相同。
设置成功:
二、编写代码
U层
'**********************************************
' 文 件 名:frmCheckRecharge
' 命名空间:UI
' 内 容:
' 功 能:查询学生充值记录
' 文件关系:
' 作 者:杨晨光
' 小 组:
' 生成日期:2014/8/12 22:17:44
' 版 本 号:V1.0.0.0
' 修改日志:
' 版权说明:
'**********************************************
Public Class frmCheckRecharge
Private Sub btnCheck_Click(sender As Object, e As EventArgs) Handles btnCheck.Click
'卡号不为空的话,开始进行传值
Dim EUser As New Entity.RechargeEntity '实例化新的RechargeEntity,用来传递B层的实体
Dim BUser As New BLL.CheckRechargeBLL '实例化新的CheckRechargeBLL,传递参数
Dim LUser As New List(Of Entity.RechargeEntity) '实例化新的List泛型集合
EUser.cardNo = VarType(txtCID.Text.Trim) '将卡号赋值给实体层的EUser,VarType将字符串类型转换成integer类型
LUser = BUser.Check(EUser) '调用B层的Check方法
'判断返回的泛型集合是否为空
'不为空
If IsNothing(LUser) = False Then
'将泛型集合中数据,显示在DataGridView控件上
DataGridView1.DataSource = LUser
Else
txtCID.Text = "" '清空输入卡号文本框
txtCID.Focus() '获得光标输入焦点
End If
End Sub
'自动显示行号
Private Sub DataGridView1_RowPostPaint(sender As Object, e As DataGridViewRowPostPaintEventArgs)
Try
e.Graphics.DrawString((e.RowIndex + 1).ToString(),
e.InheritedRowStyle.Font, New SolidBrush(Color.CadetBlue),
e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 5)
Catch
MsgBox("操作失败")
End Try
End Sub
End Class
B层
Public Class CheckRechargeBLL
Function Check(ByVal user As Entity.RechargeEntity) As List(Of Entity.RechargeEntity) '返回值为泛型集合
'先判断卡号是否为空,为空的话
If user.cardNo.ToString.Trim = "" Then
MsgBox("卡号不能为空,请输入卡号!", MsgBoxStyle.Exclamation, "警告")
Return Nothing
End If
'卡号不为空,则进行赋值判断
Dim LUser As List(Of Entity.RechargeEntity)
Dim DUser As New DAL.CheckRechargeDAL
LUser = DUser.Query(user) '将user值通过D层的Query方法,传到泛型集合LUser中
'判断返回的泛型集合是否为空
If IsNothing(LUser) = False Then '不为空
Return LUser
Else
MsgBox("没有此卡号的记录,请重新输入卡号", MsgBoxStyle.Exclamation, "警告")
Return Nothing
End If
End Function
End Class
Imports System.Data
Imports System.Data.SqlClient
Public Class CheckRechargeDAL
Function Query(ByVal user As Entity.RechargeEntity) As List(Of Entity.RechargeEntity)
'定义一个操作数据库的助手类
Dim MySqlHelper As New SqlHelper
'定义对数据库的操作语句
Dim strSql As String
strSql = "select * from T_Recharge where cardNo=@cardNo"
'加入参数
Dim paras As SqlParameter()
paras = {New SqlParameter("@cardNo", user.cardNo)}
'执行查询,并将查询的结果保存到dt里边
Dim dt As DataTable
'保存转换后的泛型集合
Dim myList As List(Of Entity.RechargeEntity)
'执行查询
dt = MySqlHelper.ExecSelect(strSql, CommandType.Text, paras)
'进行判断,dt中是否有记录
If dt.Rows.Count > 0 Then 'dt中有记录
'将dt转换为泛型集合
myList = ConvertHelper.convertToList(Of Entity.RechargeEntity)(dt)
Return myList '返回myList
Else
Return Nothing
End If
End Function
End Class
三、结果