最近打算新开个专栏,用于总结平时编程的小技巧,以飨读者。
最近有个ASP.NET的小Demo,用到一些ASP.NET的知识,本篇讲的是ASP.NET的GridView使用,GridView的使用还是非常方便的,包括数据的动态绑定,表格的编辑都非常简单,不用再为HTML的Table格式发愁了哈哈哈。本篇教程说是GridView的教程,其实是整个功能实现的总结,包括我编程时的思路、实现功能的小技巧等等。
本次项目是一个购物网站,要在上面加一个功能,需要做一个商品年销量排行榜,以下是我的整体思路,供大家品鉴:
因为是项目增加功能,所以至少先弄懂数据库中各个表的含义:
还有数据库主表的关系图,其他例如用户表,权限表等,这个功能不需要涉及这些,暂时不加以讨论:
一 准备工作
1 :模拟2012-2018年订单数据:先从tb_Detail订单详细表中找出属于2012年的数据(备注有,故意模拟的),查出OrderID:
select OrderID from tb_Detail where Remark = "2012年数据用";
2 :再通过OrderID修改tb_OrderInfo商品订单表中的各个年度:
update tb_OrderInfo set OrderDate="2012-05-31 11:27:37.123" where OrderID in (select OrderID from tb_Detail where Remark = "2012年数据用");
3 :查看了下整个2012年数据没问题(select OrderID from tb_OrderInfo where YEAR(OrderDate) =2012;)可以考虑使用for循环了:
declare @min int
declare @max int
set @min=2013
set @max=2019
while @min<@max
begin
update tb_OrderInfo set OrderDate=cast(@min as varchar(10))+"-05-31 11:27:37.123" where OrderID in (select OrderID from tb_Detail where Remark = cast(@min as varchar(10))+"年数据用")
set @min=@min+1
end
注意for循环中的cast(@min as varchar(10))字段,这是因为我们声明的@min变量是int类型的,而后面的“年数据用”和我们要查询的Remark字段都是vachar类型的,所以需要把int类型转为varchar,不然会出现如下错误:int类型转换错误!
4:最后测试数据,通过,噢耶\(^o^)/!!
二 剖析数据库过程
看了上面的数据库关系图,再看看各个表的详细定义,这个时候就需要考虑这个年度排行榜需要从哪些表提取哪些数据了,过程如下:
1:先从tb_OrderInfo商品订单表中查出某年度的订单,获取OrderID :
select OrderID from tb_OrderInfo where YEAR(OrderDate) =2012;
其中有关这个SqlServer的时间查询,我专门写了一篇文章,大家有兴趣可以看看:SQL Server 的时间函数
2:再通过OrderID(仅计算某年度的销量)映射到tb_Detail订单详细表,找到订单对应的书籍BookID,并为每本书统计销量(用group by对订单号分组,可以查询出某本书的销量,默认降序):
select BookID,sum(Num) as SalesVolume from tb_detail where OrderID in (select OrderID from tb_OrderInfo where YEAR(OrderDate) =2018) group by BookID order by sum(Num) desc;
3:再通过BookID映射到tb_BookInfo书籍详细信息表,找到BookID对应的书名BookName:
select BookName as 书名 from tb_BookInfo where BookID = 17;
三 界面设计
1 :母版页中的顶部菜单栏加上年度排行榜的链接:
查看项目源代码后发现userControl\menu.ascx是母版页菜单栏的实现,在其中加上我们所做的排行榜页面(billborad.aspx)链接,直接用的HyperLink控件:
最后效果图如下,请忽略这个上世纪的UI风格:
2 :编辑排行榜页面(billborad.aspx):
具体来说就是一个供用户选择年度的下拉列表DropDownList,有个下拉列表值改变事件,会触发页面数据的刷新:
还有一个表格GridView,用于显示排行榜数据(PS:vs全屏撸代码快捷键:使用组合键“ SHIFT + ALT + ENTER ”。):
四 排行榜功能逻辑实现
直接在billborad.aspx.cs里面写逻辑代码,这个没什么可讲的,只要是GridView的使用:
1 :设置GridView的数据源 -- DataTable
2 :为DataTable添加列,共4列,即表头,对应前端页面
3 ://为dtTable中添加行
4 :为数据源dtTable每一行赋值 排名、ID、销量,即用DataRow作为数据源实际的一行行数据:
5 :数据源绑定GridView:
6 :下拉列表值改变事件:
注意这个bind方法不要加上IsPostBack,因为这不是刷新页面。
最后运行截图如下:
用户改变了年份,数据会刷新:
参考文章:
微软官方文档,翻译的还不错:
https://code.msdn.microsoft.com/CSASPNETGridView-5b16ce70