这个功能直接在源里面写了。附上代码
1.代码总览
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="user.aspx.cs" Inherits="admin_user" %>
<%@ Import Namespace="BQ.Entity" %>
<%@ Import Namespace="BQ.BLL" %>
<%@ Import Namespace="BQ" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>BQ购物网</title>
<link href="css/yf.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div>
<table width="80%" border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="#DEDEDE" bordercolor="#FFFFFF">
<tr align="center" style="height:30px; color:White;"><td bgcolor="#dbe7a1">编号</td><td bgcolor="#dbe7a1">账户</td><td bgcolor="#dbe7a1">姓名</td><td bgcolor="#dbe7a1">性别</td><td bgcolor="#dbe7a1">手机</td><td bgcolor="#dbe7a1">状态</td><td bgcolor="#dbe7a1">日期</td><td bgcolor="#dbe7a1">操作</td></tr>
<%
string id = Request.QueryString["id"];
if (id != null)
{
if (BQ.BLL.shopping.Getusershopping(int.Parse(id)))
{
JsHelper.AlertAndRedirect("无法删除!用户正在使用系统!", "user.aspx");
}
else
{
BQ.BLL.user.del(int.Parse(id));
JsHelper.AlertAndRedirect("删除完成!", "user.aspx");
}
}
List<BQ.Entity.user> user = BQ.BLL.user.List();
for (int i = 0; i < user.Count; i++)
{
string activation = "";
if (user[i].State == 0)
{
activation = "禁用";
}
else if (user[i].State == 1)
{
activation = "正常";
}
string sex = "";
if (user[i].Sex == 2)
{
sex = "女";
}
else if (user[i].Sex == 1)
{
sex = "男";
}
%>
<tr style="height:34px"><td align="center"><%=i+1%></td><td align="center"> <%=user[i].Username%></td><td align="center"><%=user[i].Name%></td><td align="center"><%=sex%></td><td align="center"><%=user[i].Mobile%></td><td align="center"><%=activation%></td><td align="center"><%=user[i].Adddate%></td><td align="center"><a href="/admin/user_edit.aspx?id=<%=user[i].Id %>">编辑</a> | <a href="user.aspx?id=<%=user[i].Id %>">删除</a></td></tr>
<%} %>
</table>
</div>
</form>
</body>
</html>
2.下半部分,泛型
从下往上解读,先看这部分代码
List<BQ.Entity.user> user = BQ.BLL.user.List();//List<BQ.Entity.user>//这是一个泛型,具有一个或者多个类型变量的类,尖括号里面可以理解成这个泛型的数据类型,好比说BQ.Entity.user里面第一个数是int型,第二个数是字符型,第三个数是浮点型,那么这个泛型里面也是这样的。
//用法为List<数据类型> 泛型名
//这串代码的意思理解为 将BQ.BLL.user.List中的数据填入user泛型中
for (int i = 0; i < user.Count; i++)
{ //遍历user,将数据库中的帐号编号(id)状态、性别等信息依次填入user
//注意这里的id,有妙用
string activation = "";
if (user[i].State == 0)
{
activation = "禁用";
}
else if (user[i].State == 1)
{
activation = "正常";
}
string sex = "";
if (user[i].Sex == 2)
{
sex = "女";
}
else if (user[i].Sex == 1)
{
sex = "男";
}
%>
<tr style="height:34px"><td align="center"><%=i+1%></td><td align="center"> <%=user[i].Username%></td><td align="center"><%=user[i].Name%></td><td align="center"><%=sex%></td><td align="center"><%=user[i].Mobile%></td><td align="center"><%=activation%></td><td align="center"><%=user[i].Adddate%></td><td align="center"><a href="/admin/user_edit.aspx?id=<%=user[i].Id %>">编辑</a> | <a href="user.aspx?id=<%=user[i].Id %>">删除</a></td></tr>
<%} %>
BQ.MsSqlHelper.MsSqlHelper.QueryBQ.BLL.user.List()如下
public static List<Entity.user> List() { return DAC.user.List(); }
DAC.user.List与BQ.MsSqlHelper.MsSqlHelper.Query如下
public static List<Entity.user> List() { string strsql = "select * from t_user order by id desc"; DataTable dt = BQ.MsSqlHelper.MsSqlHelper.Query(strsql).Tables[0]; return Dttolist(dt); }
/// <summary> /// 执行查询语句,返回DataSet /// </summary> /// <param name="SQLString">查询语句</param> /// <returns>DataSet</returns> public static DataSet Query(string SQLString) { using (SqlConnection connection = new SqlConnection(connectionString))//连接数据库 { DataSet ds = new DataSet(); //这是个在内存里临时存放数据的东西 try { connection.Open();//打开数据库连接 SqlDataAdapter command = new SqlDataAdapter(SQLString, connection); //SqlDataAdapter有俩参数,分别是查询语句和连接字符串,这个东西能用来获取数据 command.Fill(ds, "ds"); //把刚刚查到的东西“command”塞进ds里面 } catch (SqlException ex) { throw new Exception(ex.Message); //抛出错误 } return ds; } }
回到“代码总览”这一部分
string id = Request.QueryString["id"];//取id,上文有提到把id填充到泛型里
if (id != null)
{
if (BQ.BLL.shopping.Getusershopping(int.Parse(id)))//把取到的id转为int型,传给BQ.BLL.shopping.Getusershopping
{
JsHelper.AlertAndRedirect("无法删除!用户正在使用系统!", "user.aspx");
}
else
{
BQ.BLL.user.del(int.Parse(id));
JsHelper.AlertAndRedirect("删除完成!", "user.aspx");
}
}
3.“无法删除”部分
因为这部分代码用到了三层架构的传递,代码还挺多,就单独列一个标题来细细读
if (BQ.BLL.shopping.Getusershopping(int.Parse(id)))//把取到的id转为int型,传给BQ.BLL.shopping.Getusershopping
{
JsHelper.AlertAndRedirect("无法删除!用户正在使用系统!", "user.aspx");
}
BQ.BLL.shopping.Getusershopping如下
public static bool Getusershopping(int user) { return DAC.shopping.Getusershopping(user); }
DAC.shopping.Getusershopping如下
public static bool Getusershopping(int user) { bool result = false; string strsql = "select * from t_shopping where userid=" + user + " order by id desc"; //sql语句 查找t_shopping表中userid为刚刚传过来的那些数据 DataTable dt = BQ.MsSqlHelper.MsSqlHelper.Query(strsql).Tables[0]; //填到dt表里 List<Entity.shopping> shopping = Dttolist(dt);//这又整了个泛型,先调用Dttolist方法(下面讲),参数为dt,然后塞到这个shopping泛型里面。 if (shopping.Count > 0) { result = true;//如果行数大于0,那就是true } return result;//返回给result,然后result再传到上一级的Getusershopping,以此类推到前台 }
Dttolist如下
private static List<BQ.Entity.shopping> Dttolist(DataTable dt) {//泛型方法,参数为DataTable型的dt List<BQ.Entity.shopping> list = new List<Entity.shopping>(); for (int i = 0; i < dt.Rows.Count; i++) { Entity.shopping shopping = new Entity.shopping(); shopping = BQ.DAC.shopping.Getshopping(int.Parse(dt.Rows[i]["id"].ToString())); //这里其实就是把刚才传过来的id再传给Getshopping方法,Getshopping方法根据ID获取商品信息,传回shopping list.Add(shopping); //然后再调用Add方法,把shopping里面的内容添加进去。 } return list; }
到此为止,这部分的判断功能就算完事儿了,就是根据shopping(购物车)中有没有商品来判断的。其实这是个附带的功能,是根据这个用户的购物车,如果是空的,那说明这个账户没被使用,就可以删除。如果是有内容,那就是在被使用,不可删除。下面把上文代码调用到的 Getshopping方法也略讲一下。代码如下
public static Entity.shopping Getshopping(int id) { { Entity.shopping shopping = new Entity.shopping(); string strsql = "select * from t_shopping where id=" + id + "";//查找id为传过来的id的数据巴拉巴拉…… DataTable dt = MsSqlHelper.MsSqlHelper.Query(strsql).Tables[0];//这是一个提取数据的方式,前面讲过 if (dt.Rows.Count != 0) { //dt里面有内容就都加到shopping里面 shopping.Id = int.Parse(dt.Rows[0]["id"].ToString()); shopping.Userid = BQ.DAC.user.Getuser(int.Parse(dt.Rows[0]["userid"].ToString())); shopping.Goods = BQ.DAC.goods.Getgoods(int.Parse(dt.Rows[0]["goods"].ToString())); shopping.Num = int.Parse(dt.Rows[0]["num"].ToString()); shopping.Mall = BQ.DAC.admin.Getadmin(int.Parse(dt.Rows[0]["mall"].ToString())); shopping.State = int.Parse(dt.Rows[0]["state"].ToString()); shopping.Adddate = DateTime.Parse(dt.Rows[0]["Adddate"].ToString()); } return shopping; } }
4.“删除完成”部分
接上文判断,购物车里面没有商品,走到else
else
{
BQ.BLL.user.del(int.Parse(id));把取到的id转为int型作为参数传给BLL.user.del方法
JsHelper.AlertAndRedirect("删除完成!", "user.aspx");//弹出窗口,跳转页面
}
BLL.user.del如下
public static bool del(int id)
{
return DAC.user.del(id);
}
DAC.user.del如下
public static bool del(int id)
{
bool result = false;
string strsql = "delete t_user where id=" + id + "";
//sql删除语句,删除t_user中id为“刚传过来的id”的那行数据
int j = MsSqlHelper.MsSqlHelper.ExecuteSql(strsql);//执行SQL语句,返回影响的记录数
if (j > 0)
{
result = true;
}
return result;
}