利用SQL处理DataGrid表格问题

在最初选定这个控件作为表格的显示容器来说,也曾经尝试使用mshflexgrid控件。毕竟第一次机房收费系统就使用的那个控件。控件的好坏咱不做评价。

mshflexgrid这个控件,类似于excel,使用的时候需要循环赋值,然后再显示出来。期间运行多长时间,我不太清楚。总感觉很浪费吧。之后又接触了一个DataGridView控件,虽然表格的显示都差不多,用法也几乎类似。

在使用三层架构的机房收费系统里面,很多的数据传递的时实体或者是表格。对于传递表格情况来说,直接把表格通过一个控件来显示出来就行了呗。所以本次机房收费系统,就使用了DataGridView作为表格的容器。

DataGridView作为显示的方法:

既然要作为表格显示使用,就肯定要有表头,数据来源等问题吧。

如果为了图方便,在使用DataGridView的时候,可以设置数据源DataSource来替前设置要显示的数据信息,这样,在使用的时候,稍添加一些限制,即可做到查询。

在知道以上那种方法之前,曾经考虑过一个问题,作为查询显示的表格,已经从D层,把表格处理好并且以此传回到U层了,在这种情况下,直接把返回来的dataTable作为数据源显示,同样可以达到目的。这样就省去设置数据源,测试链接等问题。

在三层之间传递的是DataTable,dataTable作为一个虚拟表,把虚拟表优化之后,直接传递到DataGridView中显示。如果因为数据库里面的字段与要显示的字段不一致,那么通过SQL语句处理好之后在作为返回值传递。

在纠结dataGrid控件,列表头等问题的时候。直接使用sql语句来优化,之后直接使用DataGrid显示。

接下来看一个查询余额实例实现过程:

U层:

Private Sub btnQuery_Click(sender As Object, e As EventArgs) Handles btnQuery.Click

        '验证 两个文本框中是否为空
        Dim MyObject As New UIcommonFunction
        If MyObject.verifyNull(Controls) = False Then
            Exit Sub
        End If

        Dim queryBll As New BLL.SqlQueryRecordBLL

        Try
            Dim dtRechargeLog As New DataTable
            dtRechargeLog = queryBll.QueryRechargeLog(txtCardNo.Text)

            dataGrid.DataSource = dtRechargeLog
        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString())
        End Try

    End Sub

U层中使用了一个公有的函数:

 ''' <summary>
    ''' 验证文本框是否为空
    ''' </summary>
    ''' <param name="log"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function verifyNull(log As Windows.Forms.Control.ControlCollection) As Boolean
        Dim objCon As New Control
        Dim flag As Boolean = True  '默认 所有文本框都不为空

        '开始检测每个控件 是否为空的判断
        For Each objCon In log
            If TypeOf (objCon) Is TextBox And objCon.Visible = True Then
                If objCon.Text = "" Then
                    MsgBox(objCon.Tag.ToString & " 不能为空,请输入完整", vbOKOnly, "提示")
                    objCon.Focus()
                    flag = False
                    Return flag
                End If
            ElseIf TypeOf (objCon) Is ComboBox And objCon.Visible = True Then
                If objCon.Text = "" Then
                    MsgBox(objCon.Tag.ToString & " 不能为空,请输入完整", vbOKOnly, "提示")
                    objCon.Focus()
                    flag = False
                    Return flag
                End If
            End If
        Next objCon

        Return True
    End Function

之后调用B层

''' <summary>
    ''' 获取充值记录
    ''' </summary>
    ''' <param name="cardNo"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function QueryRechargeLog(cardNo As String) As DataTable
        Dim iStudent As IDAL.IStudent
        iStudent = Factory.DBFactory.CreateStudent

        Dim iRechargeLog As IDAL.IRechargeLog
        iRechargeLog = Factory.DBFactory.CreateRechargeLog

        Dim dtStudent As New DataTable
        dtStudent = iStudent.QueryStudent(cardNo)

        '验证用户的卡号是否存在
        If dtStudent.Rows.Count = 0 Then
            Throw New Exception("卡号不存在")
        End If

        Dim dtRechargeLog As New DataTable
        dtRechargeLog = iRechargeLog.GetRechargeLog(cardNo)

        Return dtRechargeLog

    End Function

之后,表格的处理完全使用SQL语句来优化处理的:

''' <summary>
    ''' 查询指定时间段内的 收取金额
    ''' </summary>
    ''' <param name="stime">开始日期</param>
    ''' <param name="etime">终止日期</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetRechargeInDate(stime As String, etime As String) As DataTable Implements IDAL.IRechargeLog.GetRechargeInDate
        Dim strSQL As String = "select identity(int,1,1) as 序号,cardNo as 卡号,addCash as 充值金额,date as 日期,time as 时间,UserId as 操作人,status as 状态 into #1 from Recharge_Info where date between @sTime and @eTime  select * from #1 drop table #1"
        Dim sqlparams As SqlParameter() = {New SqlParameter("@sTime", stime),
                                           New SqlParameter("@eTime", etime)}

        Dim helper As New SqlHelper
        Dim dtRechargelog As New DataTable
        dtRechargelog = helper.Query(strSQL, CommandType.Text, sqlparams)
        Return dtRechargelog
    End Function

接口与工厂,与上个Demo类似,自行补充吧。

DataGridView作为一个表格控件,可以事先设计好模版,之后显示,也可以仅仅作为一个容器来使用。sql语句可以处理的事情有很多,完全可以后台处理之后直接显示。

有很多对表操作的地方,都可以用sql处理里面的知识解决。 视图 虚拟表就和很好的应用。

利用SQL处理DataGrid表格问题,布布扣,bubuko.com

时间: 2024-10-23 08:56:54

利用SQL处理DataGrid表格问题的相关文章

Easy-ui Datagrid表格数据的编辑与提交

前言 jQuery EasyUI是一组基于jQuery的UI 插件集合体,而jQuery EasyUI可以打造出功能更加丰富且美观的UI界面.开发者不需要了解复杂的javascript和css样式,只需要了解html标签. 一.    easy-ui基本知识 1.            easy-ui引用js顺序详解 引用Jquery的js文件: <script src="jquery-easyui-1.3.4/jquery-1.8.0.min.js" type="te

easyUI——datagrid表格批量操作

对datagrid表格进行批量的操作,是每个系统都会遇到的,通过一下小实例总结一下.其实 原理很简单:获取选中的数据的主键,传值到后台,对数据进行操作. HTML <table id="dg" title="My Users" class="easyui-datagrid" style="width:700px;height:250px" url="GetUserData" toolbar="

讲诉从酒店服务业到IT行业的心酸取经路,另附拙作 ASP.net(C#)利用SQL Server实现注册和登陆功能

楼主本人姓周,名XX,老家是曾国藩故居的,说起来和古人也算是邻里邻居. 92年出生,去年大专毕业,到现在毕业快要一年了,大学里学的专业是酒店管理,我们对外宣称为"第三产业"呵呵.到这里你们可能会心生疑问,咦,大学里怎么会有"酒店专业",你怎么会选它?说到这,楼主不得不提起一个人,那就是我的堂姐,楼主填志愿那年,人小不懂事,根本不知道如何去选择自己的专业,家里人就更不懂了,所以填志愿的事都在我这个堂姐手里做的主,填的那个学校是湖南长沙的,三年大专制,因为我这个表姐本人

利用SQL Server 2008 R2创建自动备份计划

本文主要利用SQL Server 2008 R2自带的"维护计划"创建一个自动备份数据的任务. 首先,启动?Sql Management studio,确保"SQL Server 代理"处于启动状态.如果没有,可以右击选择"启动". 第二步,依次展开"管理"---"维护计划",并右击"维护计划"选择"新建维护计划",这里你可以填写一个合适的有意义的名字. 点击&quo

利用sql报错帮助进行sql注入

我们可以利用sql报错帮助进行sql注入,这里以sql server 为例: sql查询时,若用group by子句时,该子句中的字段必须跟select 条件中的字段(非聚合函数)完全匹配,如果是select * ,那就必须将该表中所有列名都包含在group by 中:若少了哪个,就会报错,报错中会提示如下; 选择列表中的列 '列名'无效,因为该列没有包含在聚合函数或 GROUP BY 子句中. 这个提示的列名是按该表中的顺序来的,这时我们可以利用这点进行sql注入中枚举所有列的工作: 先使用

如何用easyui+JAVA 实现动态拼凑datagrid表格(续)

前面一段时间写了一篇文章: 如何用easyui+JAVA 实现动态拼凑datagrid表格 这篇文章的话,效果是可以实现,但是经过我反复试验,还是存在一些问题的. 今天这篇文章就是向大家介绍下如何避免和解决这些问题. 问题如下: 这个TEMP值其实就是上面文章提到的z1,z2,z3,z4的值,也就是说,每次进行each循环,都会查出不同的值,并返回,但是事实并不是这样的 这个TEMP返回的是EACH循环以后的最后一次的值. 记住,EACH循环本身就是一个封闭的,不会循环一次返回一个值,而是让前面

Jquery利用JSON数组创建表格

$(function () { var json = [ { "name": "张三", "age": "20", "gender": "男" }, { "name": "李四", "age": "21", "gender": "女" }, { "name&q

利用SQL注入漏洞登录后台的实现方法

利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读这篇文章,我假设读者有过写SQL语句的经历,或者能看得懂SQL语句 早在02年,国外关于SQL注入漏洞的技术文章已经很多,而国内在05年左右才开始的.  如今,谈SQL注入漏洞是否已是明日黄花,国内大大小小的网站都已经补上漏洞.但,百密必有一疏,入侵是偶然的,但安全绝对不是必然的.  前些天,网上传

如何利用sql注入进行爆库

SQL注入能做什么 在<SQL注入基础>一文介绍了SQL注入的基本原理和实验方法,那接下来就要问一下,SQL注入到底能什么? 估计很多朋友会这样认为:利用SQL注入最多只能获取当前表中的所有记录,但无法获取其它表的内容,事实果真的如此? 正像小偷从窗户爬进入房间,难道他只能在房间内偷东西?非也,他可以将整个房子洗劫一空. 不相信?那来看看如何对MySQL进行爆库. 如何将MySQL数据库连根拔起 如果作为一名黑客,根本无法知道系统中有哪些表,表中有哪些字段,那如何将数据库的内容窃取出来呢? 答