步驟01
2.操作步驟
在開始之前,要確保 Visual Studio 和 SQL Server Management Studio 已經安裝成功,並且SQL服務已經打開了。
2.1 建庫、建表
將下圖中的名字複製下來。後面的步驟中會用到。(DESKTOP-ADKCETM)
Y_strong
根據題目要求建立表結構。(注意這裏並沒有按照題目要求的設置性別字段的數據類型爲Char(4),而是設置爲了Char(2),因爲一箇中文佔2位)
然後將Oid設置爲主鍵,並將其設置爲自動增加。
(注意下圖中的Char(4)爲未修改之前,應該爲Char(2),不要被下圖混淆了,我給上錯了圖。。。)
2.2 添加測試數據
設置好表的結構後,就點擊下圖中的刷新按鈕,然後再去選擇編輯前200行。
隨便添加幾條測試數據。
這裏先統一一下規則,就是姓名只能2-4箇中文,性別只能男或者女,電話是11位數字,後面的三個字段都是1-3位數字。會在B層進行邏輯判斷的時候,主要對描述的這些規則進行驗證。
2.3 在VS中創建項目
選擇ASP.NET Web應用程序 (YYYDemo P_ULayer)
點擊確定
現在是這個樣子
在解決方案上右鍵—添加—新建項目。
選擇類庫項目。 (P_BLayer)
同樣的步驟,再新建一個類庫項目。(P_DLayer)
現在的解決方案是下圖所示的情況。
2.4 添加引用
在P_ULayer項目中添加對P_BLayer項目的引用,在P_BLayer項目中添加對P_DLayer項目的引用。
U中添加對B的引用:
B中添加對D的引用:
現在是這個樣子:
修改程序集名稱和默認命名空間名稱
同樣的方法,修改B層和D層項目的這兩個屬性,都是修改爲 YYYDemo.XXX
2.5 添加類和頁面
①:B中添加類:
BLayer
②:同樣的方法,在D中添加一個類(DLayer)
③:在U層項目中,添加一個.aspx web窗體和一個.master母版頁
③-1:添加web窗體
ShowAll
③-2:添加母版頁
Site
完成上述操作,現在的結構應該是這樣的:
2.6 建立VS與SSMS的連接
現在將 “2.1 建庫、建表” 步驟中的名字拿過來
可以看到,連接已經建立。
把下圖的連接字符串複製下來
Data Source=DESKTOP-ADKCETM;Initial Catalog=Y_strong;Integrated Security=True
2.7 實現顯示功能
①:修改D_Layer.cs的代碼,把 “2.6 步驟” 中的連接字符串拿過來。
紅框爲新增或修改的代碼,後續的步驟中也是同樣的意思。
代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace YYYDemo.P_DLayer
{
public class DLayer
{
//創建數據庫連接
private SqlConnection CreateConnection()
{
return new SqlConnection(
"Data Source=DESKTOP-ADKCETM;Initial Catalog=Y_strong;Integrated Security=True"
);
}
//關閉連接
public void D_CloseConn()
{
CreateConnection().Close();
}
//獲取全部的賬戶信息,以DataSet數據類型返回
public DataSet GetAllAccount_TO_DataSet()
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
"SELECT * FROM owner", conn
);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
return dSet;
}
}
}
②:修改B_Layer的代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YYYDemo.P_DLayer;
using System.Data;
using System.Text.RegularExpressions;//正則表達式
using System.Runtime.InteropServices;//爲了實現一個彈窗
namespace YYYDemo.P_BLayer
{
public class BLayer
{
//提示框,這兩行照着寫上即可,不必理解原理,會使用就行
[DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
public static extern int MessageBox(IntPtr handle, String message, String title, int type);
public DataSet GetAllAccount_TO_DataSet()
{
return new DLayer().GetAllAccount_TO_DataSet();
}
public void B_CloseConn()
{
new DLayer().D_CloseConn();
}
}
}
③-1:修改U層ShowAll頁面
然後到設計界面去修改GridView。
這個數據字段很關鍵,是跟數據表中的字段一一對應的,所以需要跟數據表中的字段的名稱一樣。
頁眉文本就是顯示在界面上的文本。
同樣的方法,添加如下幾列:
對應的GridView的代碼如下:
(那個SortExpression屬性可以刪掉,因爲我們並不使用它實現任何功能。)
截止到現在ShowAll.aspx的代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ShowAll.aspx.cs" Inherits="P_ULayer.ShowAll" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>小區業主列表</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div id="Div_lbl_Topic">
<asp:Label runat="server" ID="lbl_Topic" Text="小 區 業 主 列 表"></asp:Label>
</div>
<asp:GridView ID="gView" runat="server"
AllowPaging="True"
AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="Name" HeaderText="姓名" SortExpression="Name" />
<asp:BoundField DataField="Sex" HeaderText="性別" />
<asp:BoundField DataField="Phone" HeaderText="聯繫電話" SortExpression="Phone" />
<asp:BoundField DataField="BuildNum" HeaderText="樓號" SortExpression="BuildNum" />
<asp:BoundField DataField="Unit" HeaderText="單元" SortExpression="Unit" />
<asp:BoundField DataField="RoomNum" HeaderText="房間號" SortExpression="RoomNum" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
編寫ShowAll.aspx.cs的代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using YYYDemo.P_BLayer;
namespace P_ULayer
{
public partial class ShowAll : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.gView.DataSource = new BLayer().GetAllAccount_TO_DataSet();
this.gView.DataBind();
new BLayer().B_CloseConn();
}
}
}
運行測試:( 一定要讓VS當前活動窗口爲ShowAll.aspx或者是****ShowAll.aspx.cs纔可以摁下F5運行)
可以看到已經能夠正常顯示出數據表的信息了。
2.8 新建內容頁,並編輯母版頁和內容頁以及ShowAll頁的UI
①:編寫Site.Master
隱藏起來的table內容可以直接查看下面的代碼。
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="P_ULayer.Site" %>
<!DOCTYPE html>
<html>
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<div id="Div_hLink_TO_01">
<asp:HyperLink ID="hLink_TO_ShowAll" runat="server" NavigateUrl="~/ShowAll.aspx" Target="_self" Text="返回主頁"></asp:HyperLink>
</div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder_DivLabel" runat="server">
</asp:ContentPlaceHolder>
<br />
<br />
<table id="tableUI">
<tr>
<td style="width: 48%" class="td_Left">
<asp:Label ID="lbl_Name" runat="server" Text="姓名:"></asp:Label>
</td>
<td style="width: 50%">
<asp:TextBox ID="textBox_Name" runat="server" Font-Size="16pt"></asp:TextBox>
</td>
</tr>
<tr>
<td class="td_Left">
<asp:Label ID="lbl_Sex" runat="server" Text="性別:"></asp:Label>
</td>
<td>
<asp:RadioButton ID="radioBtn_Boy" runat="server" GroupName="Sex" Text="男" Checked="True" />
<asp:RadioButton ID="radioBtn_Girl" runat="server" GroupName="Sex" Text="女" />
</td>
</tr>
<tr>
<td class="td_Left">
<asp:Label ID="lbl_Phone" runat="server" Text="聯繫電話:"></asp:Label>
</td>
<td>
<asp:TextBox ID="textBox_Phone" runat="server" Font-Size="16pt"></asp:TextBox>
</td>
</tr>
<tr>
<td class="td_Left">
<asp:Label ID="lbl_BuildNum" runat="server" Text="樓號:"></asp:Label>
</td>
<td>
<asp:TextBox ID="textBox_BuildNum" runat="server" Font-Size="16pt"></asp:TextBox>
</td>
</tr>
<tr>
<td class="td_Left">
<asp:Label ID="lbl_Unit" runat="server" Text="單元:"></asp:Label>
</td>
<td>
<asp:TextBox ID="textBox_Unit" runat="server" Font-Size="16pt"></asp:TextBox>
</td>
</tr>
<tr>
<td class="td_Left">
<asp:Label ID="lbl_RoomNum" runat="server" Text="房間號:"></asp:Label>
</td>
<td>
<asp:TextBox ID="textBox_RoomNum" runat="server" Font-Size="16pt"></asp:TextBox>
</td>
</tr>
</table>
<br />
<br />
<asp:ContentPlaceHolder ID="ContentPlaceHolder_DivButton" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
②:添加內容頁:
可以看到新建的內容頁爲下圖所示:
同樣的方法,再新建一個內容頁,然後修改兩個內容頁的名字,具體效果如下:
③:編輯內容頁的代碼
③-1:編輯後的AddAccount內容頁:
在設計界面,雙擊Button,爲其添加一個點擊事件。
下圖這個函數是雙擊後自動創建的
回到AddAccount這個內容頁的.aspx中,可以看到:
自動多了一個這個屬性。
截止到目前,AddAccount.aspx內容頁的代碼如下:
<%@ Page Title="新增業主" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="AddAccount.aspx.cs" Inherits="YYYDemo.P_ULayer.WebForm1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder_DivLabel" runat="server">
<div id="Div_lbl_Topic">
<asp:Label ID="lbl_Topic" runat="server" Text="新 增 業 主"></asp:Label>
</div>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder_DivButton" runat="server">
<div id="Div_btnSubmit">
<asp:Button ID="btnSubmit" runat="server" class="CSS_class_btnSubmit" Text="提交" OnClick="btnSubmit_Click"/>
</div>
</asp:Content>
③-2:跟③-1同樣的 步驟,去修改AlterAccount內容頁的代碼。
截止到目前,AlterAccount.aspx的代碼:
<%@ Page Title="修改業主" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="AlterAccount.aspx.cs" Inherits="YYYDemo.P_ULayer.WebForm2" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder_DivLabel" runat="server">
<div id="Div_lbl_Topic">
<asp:Label ID="lbl_Topic" runat="server" Text="修 改 業 主"></asp:Label>
</div>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder_DivButton" runat="server">
<div id="Div_btnSubmit">
<asp:Button ID="btnSubmit" runat="server" Text="提交" class="CSS_class_btnSubmit" OnClick="btnSubmit_Click" />
</div>
</asp:Content>
④:爲ShowAll頁面新加一個鏈接控件
截止到目前,ShowAll頁面的代碼:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ShowAll.aspx.cs" Inherits="P_ULayer.ShowAll" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>小區業主列表</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div id="Div_lbl_Topic">
<asp:Label runat="server" ID="lbl_Topic" Text="小 區 業 主 列 表"></asp:Label>
</div>
<div>
<br /><br />
<asp:HyperLink Target="_self" NavigateUrl="~/AddAccount.aspx" runat="server" ID="hLink_AddAccount" Text="新增業主"></asp:HyperLink>
<br /><br /><br /><br />
</div>
<asp:GridView ID="gView" runat="server"
AllowPaging="True"
AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="Name" HeaderText="姓名" SortExpression="Name" />
<asp:BoundField DataField="Sex" HeaderText="性別" />
<asp:BoundField DataField="Phone" HeaderText="聯繫電話" SortExpression="Phone" />
<asp:BoundField DataField="BuildNum" HeaderText="樓號" SortExpression="BuildNum" />
<asp:BoundField DataField="Unit" HeaderText="單元" SortExpression="Unit" />
<asp:BoundField DataField="RoomNum" HeaderText="房間號" SortExpression="RoomNum" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
運行測試:
可以正常的進入到新增業主界面和返回主頁。
2.9 實現新增業主功能
先修改DLayer的代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace YYYDemo.P_DLayer
{
public class DLayer
{
//創建數據庫連接
private SqlConnection CreateConnection()
{
return new SqlConnection(
"Data Source=DESKTOP-ADKCETM;Initial Catalog=Y_strong;Integrated Security=True"
);
}
//關閉連接
public void D_CloseConn()
{
CreateConnection().Close();
}
//獲取全部的賬戶信息,以DataSet數據類型返回
public DataSet GetAllAccount_TO_DataSet()
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
"SELECT * FROM owner", conn
);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
return dSet;
}
//添加一個賬戶
public void AddAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format(
"INSERT INTO owner(name,sex,phone,buildnum,unit,roomnum) " +
"VALUES(N'{0}','{1}',N'{2}',N'{3}',N'{4}',N'{5}')"
, name, sex, phone, buildNum, unit, roomNum),
conn
);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
}
}
再修改BLayer的代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YYYDemo.P_DLayer;
using System.Data;
using System.Text.RegularExpressions;//正則表達式
using System.Runtime.InteropServices;//爲了實現一個彈窗
namespace YYYDemo.P_BLayer
{
public class BLayer
{
//提示框,這兩行照着寫上即可,不必理解原理,會使用就行
[DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
public static extern int MessageBox(IntPtr handle, String message, String title, int type);
public DataSet GetAllAccount_TO_DataSet()
{
return new DLayer().GetAllAccount_TO_DataSet();
}
public void B_CloseConn()
{
new DLayer().D_CloseConn();
}
string errorStr = "";//這個也可以設置成局部變量,只不過讓RegularCheck_Add(Update)_TO_Bool函數多傳遞一個參數而已。
//添加賬戶時正則表達式對輸入數據的驗證
private bool RegularCheck_Add_TO_Bool(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
errorStr = "";
bool flag = true;
string rStr_Name = "^[\u4e00-\u9fa5]{2,4}$";//2-4箇中文
string rStr_Phone = @"^\d{11}$";//11位數字
string rStr_BuildNum_Unit_RoomNum = @"^\d{1,3}$";//1-3位數字
if (!Regex.IsMatch(name, rStr_Name))
{
errorStr += "姓名應爲2-4個漢字!\n";
flag = false;
}
if (!Regex.IsMatch(phone, rStr_Phone))
{
errorStr += "號碼應爲11位數字!\n";
flag = false;
}
if (!Regex.IsMatch(buildNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "樓號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(unit, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "單元號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(roomNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "房間號應爲1-3位數字!\n";
flag = false;
}
DataTable table = GetAllAccount_TO_DataSet().Tables[0];
bool equal_Phone = false;
bool equal_Position = false;
for (int i = 0; i < table.Rows.Count; i++)
{
if (phone == table.Rows[i][3].ToString())
equal_Phone = true;
if (
buildNum == table.Rows[i][4].ToString() &&
unit == table.Rows[i][5].ToString() &&
roomNum == table.Rows[i][6].ToString()
)
equal_Position = true;
}
if (equal_Phone)
{
errorStr += "聯繫電話不能重複!\n";
flag = false;
}
if (equal_Position)
{
errorStr += "住房位置不能重複!\n";
flag = false;
}
B_CloseConn();
return flag;
}
//添加一個賬戶
public string AddAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
if (RegularCheck_Add_TO_Bool(name, sex, phone, buildNum, unit, roomNum))
{
errorStr = "新增業主信息成功!";
new DLayer().AddAnAccount(name, sex, phone, buildNum, unit, roomNum);
}
else
errorStr += "\n新增業主信息失敗!";
return errorStr;
}
}
}
修改AddAccount.aspx.cs文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using YYYDemo.P_BLayer;
namespace YYYDemo.P_ULayer
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
char sex = '男';
if ((Master.FindControl("radioBtn_Girl") as RadioButton).Checked)
sex = '女';
string message = new BLayer().AddAnAccount(
(Master.FindControl("textBox_Name") as TextBox).Text.ToString(),
sex,
(Master.FindControl("textBox_Phone") as TextBox).Text.ToString(),
(Master.FindControl("textBox_BuildNum") as TextBox).Text.ToString(),
(Master.FindControl("textBox_Unit") as TextBox).Text.ToString(),
(Master.FindControl("textBox_RoomNum") as TextBox).Text.ToString()
);
BLayer.MessageBox(IntPtr.Zero, message, "提示!", 0);
}
}
}
- Master.FindControl(“IDName”)
這個代碼的意思是通過id尋找在母版頁上的控件 - BLayer.MessageBox(IntPtr.Zero, message, “提示!”, 0);
第二個參數(string 類型)表示的是提示框顯示的文本,第三個參數(string 類型)是提示框左上角的文本,第四個參數(int 類型)是按鈕的個數,0就是一個確定按鈕,1就是一個確定按鈕、一個取消按鈕(後面在刪除功能上用到)。
運行測試:
輸入正確數據的時候:
輸入錯誤數據的時候:
可以看到已經可以正常的進行驗證與添加,添加成功後去SQLserver上看一下表的數據,發現已經添加上了。
2.10 實現修改業主信息功能
先修改DLayer的代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace YYYDemo.P_DLayer
{
public class DLayer
{
//創建數據庫連接
private SqlConnection CreateConnection()
{
return new SqlConnection(
"Data Source=DESKTOP-ADKCETM;Initial Catalog=Y_strong;Integrated Security=True"
);
}
//關閉連接
public void D_CloseConn()
{
CreateConnection().Close();
}
//獲取全部的賬戶信息,以DataSet數據類型返回
public DataSet GetAllAccount_TO_DataSet()
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
"SELECT * FROM owner", conn
);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
return dSet;
}
//添加一個賬戶
public void AddAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format(
"INSERT INTO owner(name,sex,phone,buildnum,unit,roomnum) " +
"VALUES(N'{0}','{1}',N'{2}',N'{3}',N'{4}',N'{5}')"
, name, sex, phone, buildNum, unit, roomNum),
conn
);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
//通過手機號獲得一個賬戶的信息,以DataSet數據類型返回;
//這個函數是爲了在B層通過手機號獲取賬戶的id
public DataSet GetAnAccountByPhone_TO_DataSet(string phone)
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
string.Format("SELECT * FROM owner WHERE phone=N'{0}'", phone),
conn);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
return dSet;
}
//通過id獲得一個賬戶的信息,以DataSet數據類型返回
public DataSet GetAnAccountByIndex_TO_DataSet(int index)
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
string.Format("SELECT * FROM owner WHERE Oid={0}", index),
conn);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
return dSet;
}
//修改一行信息
public void UpdateAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum, int index)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format(
"UPDATE owner SET name=N'{0}',sex='{1}',phone=N'{2}',buildnum=N'{3}',unit=N'{4}',roomnum=N'{5}' " +
"WHERE Oid={6}; ", name, sex, phone, buildNum, unit, roomNum, index),
conn
);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
}
}
修改BLayer的代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YYYDemo.P_DLayer;
using System.Data;
using System.Text.RegularExpressions;//正則表達式
using System.Runtime.InteropServices;//爲了實現一個彈窗
namespace YYYDemo.P_BLayer
{
public class BLayer
{
//提示框,這兩行照着寫上即可,不必理解原理,會使用就行
[DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
public static extern int MessageBox(IntPtr handle, String message, String title, int type);
public DataSet GetAllAccount_TO_DataSet()
{
return new DLayer().GetAllAccount_TO_DataSet();
}
public void B_CloseConn()
{
new DLayer().D_CloseConn();
}
string errorStr = "";//這個也可以設置成局部變量,只不過讓RegularCheck_Add(Update)_TO_Bool函數多傳遞一個參數而已。
//添加賬戶時正則表達式對輸入數據的驗證
private bool RegularCheck_Add_TO_Bool(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
errorStr = "";
bool flag = true;
string rStr_Name = "^[\u4e00-\u9fa5]{2,4}$";//2-4箇中文
string rStr_Phone = @"^\d{11}$";//11位數字
string rStr_BuildNum_Unit_RoomNum = @"^\d{1,3}$";//1-3位數字
if (!Regex.IsMatch(name, rStr_Name))
{
errorStr += "姓名應爲2-4個漢字!\n";
flag = false;
}
if (!Regex.IsMatch(phone, rStr_Phone))
{
errorStr += "號碼應爲11位數字!\n";
flag = false;
}
if (!Regex.IsMatch(buildNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "樓號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(unit, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "單元號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(roomNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "房間號應爲1-3位數字!\n";
flag = false;
}
DataTable table = GetAllAccount_TO_DataSet().Tables[0];
bool equal_Phone = false;
bool equal_Position = false;
for (int i = 0; i < table.Rows.Count; i++)
{
if (phone == table.Rows[i][3].ToString())
equal_Phone = true;
if (
buildNum == table.Rows[i][4].ToString() &&
unit == table.Rows[i][5].ToString() &&
roomNum == table.Rows[i][6].ToString()
)
equal_Position = true;
}
if (equal_Phone)
{
errorStr += "聯繫電話不能重複!\n";
flag = false;
}
if (equal_Position)
{
errorStr += "住房位置不能重複!\n";
flag = false;
}
B_CloseConn();
return flag;
}
//添加一個賬戶
public string AddAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
if (RegularCheck_Add_TO_Bool(name, sex, phone, buildNum, unit, roomNum))
{
errorStr = "新增業主信息成功!";
new DLayer().AddAnAccount(name, sex, phone, buildNum, unit, roomNum);
}
else
errorStr += "\n新增業主信息失敗!";
return errorStr;
}
//通過手機號獲取該行數據的索引,爲下面的GetAnAccountByIndex_TO_DataSet()函數提供作用
public int GetIndexByPhone_TO_Int(string phone)
{
return Convert.ToInt32(
new DLayer().GetAnAccountByPhone_TO_DataSet(phone).Tables[0].Rows[0][0].ToString());
}
//通過索引獲取該行數據的全部信息,以DataSet數據類型返回
public DataSet GetAnAccountByIndex_TO_DataSet(int index)
{
return new DLayer().GetAnAccountByIndex_TO_DataSet(index);
}
//修改一個賬戶的信息
public string UpdateAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum, int index)
{
if (RegularCheck_Update_TO_Bool(name, sex, phone, buildNum, unit, roomNum, index))
{
errorStr = "修改業主信息成功!";
new DLayer().UpdateAnAccount(name, sex, phone, buildNum, unit, roomNum, index);
}
else
errorStr += "\n修改業主信息失敗!";
return errorStr;
}
//修改賬戶時正則表達式對輸入數據的驗證
//修改個人信息,需要驗證 手機號 和 住房位置 是否 *跟別人* 重複;還需驗證數據是否合理
private bool RegularCheck_Update_TO_Bool(string name, char sex, string phone, string buildNum, string unit, string roomNum, int index)
{
errorStr = "";
bool flag = true;
string rStr_Name = "^[\u4e00-\u9fa5]{2,4}$";
string rStr_Phone = @"^\d{11}$";
string rStr_BuildNum_Unit_RoomNum = @"^\d{1,3}$";
if (!Regex.IsMatch(name, rStr_Name))
{
errorStr += "姓名應爲2-4個漢字!\n";
flag = false;
}
if (!Regex.IsMatch(phone, rStr_Phone))
{
errorStr += "號碼應爲11位數字!\n";
flag = false;
}
if (!Regex.IsMatch(buildNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "樓號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(unit, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "單元號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(roomNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "房間號應爲1-3位數字!\n";
flag = false;
}
DataTable table = GetAllAccount_TO_DataSet().Tables[0];
bool equal_Phone = false;
bool equal_Position = false;
for (int i = 0; i < table.Rows.Count; i++)
{
if (Convert.ToInt32(table.Rows[i][0].ToString())
!= index)
{
if (phone == table.Rows[i][3].ToString())
equal_Phone = true;
if (
buildNum == table.Rows[i][4].ToString() &&
unit == table.Rows[i][5].ToString() &&
roomNum == table.Rows[i][6].ToString()
)
equal_Position = true;
}
}
if (equal_Phone)
{
errorStr += "聯繫電話不能重複!\n";
flag = false;
}
if (equal_Position)
{
errorStr += "住房位置不能重複!\n";
flag = false;
}
B_CloseConn();
return flag;
}
}
}
修改ShowAll頁面的GridView控件的事件,雙擊下圖這兩個事件處,讓其自動添加兩個方法。
爲GridView添加兩列ButtonField列。
可以看到這一列已經出來了。
繼續編輯列。
將 修改 這一列的CommandName修改爲Y_Update
可以在ShowALl.aspx頁面的源碼上看到如下圖所示的代碼:
截止目前,ShowAll.aspx的代碼:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ShowAll.aspx.cs" Inherits="P_ULayer.ShowAll" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>小區業主列表</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div id="Div_lbl_Topic">
<asp:Label runat="server" ID="lbl_Topic" Text="小 區 業 主 列 表"></asp:Label>
</div>
<div>
<br /><br />
<asp:HyperLink Target="_self" NavigateUrl="~/AddAccount.aspx" runat="server" ID="hLink_AddAccount" Text="新增業主"></asp:HyperLink>
<br /><br /><br /><br />
</div>
<asp:GridView ID="gView" runat="server"
AllowPaging="True"
AutoGenerateColumns="False" OnPageIndexChanging="gView_PageIndexChanging" OnRowCommand="gView_RowCommand">
<Columns>
<asp:BoundField DataField="Name" HeaderText="姓名" SortExpression="Name" />
<asp:BoundField DataField="Sex" HeaderText="性別" />
<asp:BoundField DataField="Phone" HeaderText="聯繫電話" SortExpression="Phone" />
<asp:BoundField DataField="BuildNum" HeaderText="樓號" SortExpression="BuildNum" />
<asp:BoundField DataField="Unit" HeaderText="單元" SortExpression="Unit" />
<asp:BoundField DataField="RoomNum" HeaderText="房間號" SortExpression="RoomNum" />
<asp:ButtonField CommandName="Y_Update" HeaderText="操作" ShowHeader="True" Text="修改" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
繼續修改ShowAll.aspx.cs的代碼,在ShowAll頁面上實現換頁功能和跳轉到AlterAccount頁面的功能。
截止目前,ShowAll.aspx.cs的代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using YYYDemo.P_BLayer;
namespace P_ULayer
{
public partial class ShowAll : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.gView.DataSource = new BLayer().GetAllAccount_TO_DataSet();
this.gView.DataBind();
new BLayer().B_CloseConn();
}
protected void gView_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Y_Update" || e.CommandName == "Y_Delete")
{
//獲取 操作列 或者 刪除列 點擊的是GridView的哪一行
int gViewSelect_Index = Convert.ToInt32(e.CommandArgument);
//將點擊的這一行的手機號(因爲手機號不可重複)的業主的Oid字段的值傳給 全局變量 Application["Index"]
Application["Index"] = new BLayer().GetIndexByPhone_TO_Int(
this.gView.Rows[gViewSelect_Index].Cells[2].Text.ToString()
);
//這個代碼塊也就是實現了 : 點擊的哪一行 ---> 手機號 ---> Oid ---> Application["Index"]
}
if (e.CommandName == "Y_Update")
Response.Redirect("AlterAccount.aspx");
if (e.CommandName == "Y_Delete")
{
//TODO
}
new BLayer().B_CloseConn();
}
protected void gView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.gView.PageIndex = e.NewPageIndex;
gView.DataBind();
}
}
}
修改AlterAccount.cs的代碼:
運行測試:
沒問題
2.11 實現刪除業主信息功能
DLayer
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace YYYDemo.P_DLayer
{
public class DLayer
{
//創建數據庫連接
private SqlConnection CreateConnection()
{
return new SqlConnection(
"Data Source=DESKTOP-ADKCETM;Initial Catalog=Y_strong;Integrated Security=True"
);
}
//關閉連接
public void D_CloseConn()
{
CreateConnection().Close();
}
//獲取全部的賬戶信息,以DataSet數據類型返回
public DataSet GetAllAccount_TO_DataSet()
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
"SELECT * FROM owner", conn
);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
return dSet;
}
//添加一個賬戶
public void AddAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format(
"INSERT INTO owner(name,sex,phone,buildnum,unit,roomnum) " +
"VALUES(N'{0}','{1}',N'{2}',N'{3}',N'{4}',N'{5}')"
, name, sex, phone, buildNum, unit, roomNum),
conn
);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
//通過手機號獲得一個賬戶的信息,以DataSet數據類型返回;
//這個函數是爲了在B層通過手機號獲取賬戶的id
public DataSet GetAnAccountByPhone_TO_DataSet(string phone)
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
string.Format("SELECT * FROM owner WHERE phone=N'{0}'", phone),
conn);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
return dSet;
}
//通過id獲得一個賬戶的信息,以DataSet數據類型返回
public DataSet GetAnAccountByIndex_TO_DataSet(int index)
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
string.Format("SELECT * FROM owner WHERE Oid={0}", index),
conn);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
return dSet;
}
//修改一行信息
public void UpdateAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum, int index)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format(
"UPDATE owner SET name=N'{0}',sex='{1}',phone=N'{2}',buildnum=N'{3}',unit=N'{4}',roomnum=N'{5}' " +
"WHERE Oid={6}; ", name, sex, phone, buildNum, unit, roomNum, index),
conn
);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
//刪除一行信息
public void DeleteAnAccount(int index)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format("DELETE FROM owner WHERE Oid = {0}", index),
conn);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
}
}
BLayer
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YYYDemo.P_DLayer;
using System.Data;
using System.Text.RegularExpressions;//正則表達式
using System.Runtime.InteropServices;//爲了實現一個彈窗
namespace YYYDemo.P_BLayer
{
public class BLayer
{
//提示框,這兩行照着寫上即可,不必理解原理,會使用就行
[DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
public static extern int MessageBox(IntPtr handle, String message, String title, int type);
public DataSet GetAllAccount_TO_DataSet()
{
return new DLayer().GetAllAccount_TO_DataSet();
}
public void B_CloseConn()
{
new DLayer().D_CloseConn();
}
string errorStr = "";//這個也可以設置成局部變量,只不過讓RegularCheck_Add(Update)_TO_Bool函數多傳遞一個參數而已。
//添加賬戶時正則表達式對輸入數據的驗證
private bool RegularCheck_Add_TO_Bool(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
errorStr = "";
bool flag = true;
string rStr_Name = "^[\u4e00-\u9fa5]{2,4}$";//2-4箇中文
string rStr_Phone = @"^\d{11}$";//11位數字
string rStr_BuildNum_Unit_RoomNum = @"^\d{1,3}$";//1-3位數字
if (!Regex.IsMatch(name, rStr_Name))
{
errorStr += "姓名應爲2-4個漢字!\n";
flag = false;
}
if (!Regex.IsMatch(phone, rStr_Phone))
{
errorStr += "號碼應爲11位數字!\n";
flag = false;
}
if (!Regex.IsMatch(buildNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "樓號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(unit, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "單元號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(roomNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "房間號應爲1-3位數字!\n";
flag = false;
}
DataTable table = GetAllAccount_TO_DataSet().Tables[0];
bool equal_Phone = false;
bool equal_Position = false;
for (int i = 0; i < table.Rows.Count; i++)
{
if (phone == table.Rows[i][3].ToString())
equal_Phone = true;
if (
buildNum == table.Rows[i][4].ToString() &&
unit == table.Rows[i][5].ToString() &&
roomNum == table.Rows[i][6].ToString()
)
equal_Position = true;
}
if (equal_Phone)
{
errorStr += "聯繫電話不能重複!\n";
flag = false;
}
if (equal_Position)
{
errorStr += "住房位置不能重複!\n";
flag = false;
}
B_CloseConn();
return flag;
}
//添加一個賬戶
public string AddAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
if (RegularCheck_Add_TO_Bool(name, sex, phone, buildNum, unit, roomNum))
{
errorStr = "新增業主信息成功!";
new DLayer().AddAnAccount(name, sex, phone, buildNum, unit, roomNum);
}
else
errorStr += "\n新增業主信息失敗!";
return errorStr;
}
//通過手機號獲取該行數據的索引,爲下面的GetAnAccountByIndex_TO_DataSet()函數提供作用
public int GetIndexByPhone_TO_Int(string phone)
{
return Convert.ToInt32(
new DLayer().GetAnAccountByPhone_TO_DataSet(phone).Tables[0].Rows[0][0].ToString());
}
//通過索引獲取該行數據的全部信息,以DataSet數據類型返回
public DataSet GetAnAccountByIndex_TO_DataSet(int index)
{
return new DLayer().GetAnAccountByIndex_TO_DataSet(index);
}
//修改一個賬戶的信息
public string UpdateAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum, int index)
{
if (RegularCheck_Update_TO_Bool(name, sex, phone, buildNum, unit, roomNum, index))
{
errorStr = "修改業主信息成功!";
new DLayer().UpdateAnAccount(name, sex, phone, buildNum, unit, roomNum, index);
}
else
errorStr += "\n修改業主信息失敗!";
return errorStr;
}
//修改賬戶時正則表達式對輸入數據的驗證
//修改個人信息,需要驗證 手機號 和 住房位置 是否 *跟別人* 重複;還需驗證數據是否合理
private bool RegularCheck_Update_TO_Bool(string name, char sex, string phone, string buildNum, string unit, string roomNum, int index)
{
errorStr = "";
bool flag = true;
string rStr_Name = "^[\u4e00-\u9fa5]{2,4}$";
string rStr_Phone = @"^\d{11}$";
string rStr_BuildNum_Unit_RoomNum = @"^\d{1,3}$";
if (!Regex.IsMatch(name, rStr_Name))
{
errorStr += "姓名應爲2-4個漢字!\n";
flag = false;
}
if (!Regex.IsMatch(phone, rStr_Phone))
{
errorStr += "號碼應爲11位數字!\n";
flag = false;
}
if (!Regex.IsMatch(buildNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "樓號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(unit, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "單元號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(roomNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "房間號應爲1-3位數字!\n";
flag = false;
}
DataTable table = GetAllAccount_TO_DataSet().Tables[0];
bool equal_Phone = false;
bool equal_Position = false;
for (int i = 0; i < table.Rows.Count; i++)
{
if (Convert.ToInt32(table.Rows[i][0].ToString())
!= index)
{
if (phone == table.Rows[i][3].ToString())
equal_Phone = true;
if (
buildNum == table.Rows[i][4].ToString() &&
unit == table.Rows[i][5].ToString() &&
roomNum == table.Rows[i][6].ToString()
)
equal_Position = true;
}
}
if (equal_Phone)
{
errorStr += "聯繫電話不能重複!\n";
flag = false;
}
if (equal_Position)
{
errorStr += "住房位置不能重複!\n";
flag = false;
}
B_CloseConn();
return flag;
}
//刪除一個賬戶
public string DeleteAnAccount(int index)
{
errorStr = "刪除業主信息成功!";
new DLayer().DeleteAnAccount(index);
return errorStr;
}
}
}
ShowAll.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ShowAll.aspx.cs" Inherits="P_ULayer.ShowAll" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>小區業主列表</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div id="Div_lbl_Topic">
<asp:Label runat="server" ID="lbl_Topic" Text="小 區 業 主 列 表"></asp:Label>
</div>
<div>
<br /><br />
<asp:HyperLink Target="_self" NavigateUrl="~/AddAccount.aspx" runat="server" ID="hLink_AddAccount" Text="新增業主"></asp:HyperLink>
<br /><br /><br /><br />
</div>
<asp:GridView ID="gView" runat="server"
AllowPaging="True"
AutoGenerateColumns="False" OnPageIndexChanging="gView_PageIndexChanging" OnRowCommand="gView_RowCommand">
<Columns>
<asp:BoundField DataField="Name" HeaderText="姓名" SortExpression="Name" />
<asp:BoundField DataField="Sex" HeaderText="性別" />
<asp:BoundField DataField="Phone" HeaderText="聯繫電話" SortExpression="Phone" />
<asp:BoundField DataField="BuildNum" HeaderText="樓號" SortExpression="BuildNum" />
<asp:BoundField DataField="Unit" HeaderText="單元" SortExpression="Unit" />
<asp:BoundField DataField="RoomNum" HeaderText="房間號" SortExpression="RoomNum" />
<asp:ButtonField CommandName="Y_Update" HeaderText="操作" ShowHeader="True" Text="修改" />
<asp:ButtonField CommandName="Y_Delete" HeaderText="操作" ShowHeader="True" Text="刪除" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
修改ShowAll.aspx.cs的代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using YYYDemo.P_BLayer;
namespace P_ULayer
{
public partial class ShowAll : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.gView.DataSource = new BLayer().GetAllAccount_TO_DataSet();
this.gView.DataBind();
new BLayer().B_CloseConn();
}
protected void gView_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Y_Update" || e.CommandName == "Y_Delete")
{
//獲取 操作列 或者 刪除列 點擊的是GridView的哪一行
int gViewSelect_Index = Convert.ToInt32(e.CommandArgument);
//將點擊的這一行的手機號(因爲手機號不可重複)的業主的Oid字段的值傳給 全局變量 Application["Index"]
Application["Index"] = new BLayer().GetIndexByPhone_TO_Int(
this.gView.Rows[gViewSelect_Index].Cells[2].Text.ToString()
);
//這個代碼塊也就是實現了 : 點擊的哪一行 ---> 手機號 ---> Oid ---> Application["Index"]
}
if (e.CommandName == "Y_Update")
Response.Redirect("AlterAccount.aspx");
if (e.CommandName == "Y_Delete")
{
if (BtnDelete() == 1)
{
new BLayer().DeleteAnAccount(Convert.ToInt32(Application["Index"]));
Response.Redirect("ShowAll.aspx");
}
}
new BLayer().B_CloseConn();
}
protected void gView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.gView.PageIndex = e.NewPageIndex;
gView.DataBind();
}
private int BtnDelete()
{
return BLayer.MessageBox(IntPtr.Zero, "確定要刪除這條數據嗎?", "警告!", 1);
}
}
}
運行測試:
我這裏先隨便添加了多條數據:
可以看到,換頁功能正常:
下面進行進行刪除操作:
正常
分割線一
截止到現在,已經完成了SQLserver數據庫上的增刪改查,樣式表我還沒怎麼添加,好像只是給修改和刪除頁面的TextBox添加了一個字體大小爲16pt的樣式。
接下來的部分我會添加樣式表和樣式,並且完成連接MySQL的操作。
可能還會添加實體類和對不同數據庫的支持,主題和皮膚功能也在預定之列吧。或許還會添加一個頭像。
以上內容完成後的當前時間:2019年5月22日00:32:39
2.12 添加實體類,替代DataSet傳遞數據
新建一個Entity類庫項目
修改Entity項目的程序集名稱和默認命名空間名稱
並添加一個Owner類
編輯Owner.cs的代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace YYYDemo.Entity
{
public class Owner
{
private int oid;
private string name;
private char sex;
private string phone;
private string buildNum;
private string unit;
private string roomNum;
public int Oid
{
set { oid = value; }
get { return oid; }
}
public string Name
{
set { name = value; }
get { return name; }
}
public char Sex
{
set { sex = value; }
get { return sex; }
}
public string Phone
{
set { phone = value; }
get { return phone; }
}
public string BuildNum
{
set { buildNum = value; }
get { return buildNum; }
}
public string Unit
{
set { unit = value; }
get { return unit; }
}
public string RoomNum
{
set { roomNum = value; }
get { return roomNum; }
}
}
}
添加引用,添加完後應該是下圖所示的情況:
修改D層的P_DLayer項目的DLayer類
修改B層的P_BLayer項目的BLayer類
修改U層的P_ULayer項目的ShowAll.aspx.cs
修改U層的P_ULayer項目的AlterAccount.aspx.cs 的代碼
運行測試,發現沒問題。
2.13 目前的代碼
1. 未刪減多餘代碼時:
DLayer.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using YYYDemo.Entity;
namespace YYYDemo.P_DLayer
{
public class DLayer
{
//創建數據庫連接
private SqlConnection CreateConnection()
{
return new SqlConnection(
"Data Source=DESKTOP-ADKCETM;Initial Catalog=Y_strong;Integrated Security=True"
);
}
//關閉連接
public void D_CloseConn()
{
CreateConnection().Close();
}
//獲取全部的賬戶信息,以DataSet數據類型返回
public DataSet GetAllAccount_TO_DataSet()
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
"SELECT * FROM owner", conn
);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
return dSet;
}
public IList<Owner> GetAllAccount()
{
List<Owner> owners = new List<Owner>();
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
"SELECT * FROM owner", conn
);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
for (int i = 0; i < dSet.Tables[0].Rows.Count; i++)
{
Owner owner = new Owner();
owner.Oid = Convert.ToInt32(dSet.Tables[0].Rows[i][0].ToString());
owner.Name = dSet.Tables[0].Rows[i][1].ToString();
owner.Sex = Convert.ToChar(dSet.Tables[0].Rows[i][2].ToString());
owner.Phone = dSet.Tables[0].Rows[i][3].ToString();
owner.BuildNum = dSet.Tables[0].Rows[i][4].ToString();
owner.Unit = dSet.Tables[0].Rows[i][5].ToString();
owner.RoomNum = dSet.Tables[0].Rows[i][6].ToString();
owners.Add(owner);
}
conn.Close();
return owners;
}
//添加一個賬戶
public void AddAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format(
"INSERT INTO owner(name,sex,phone,buildnum,unit,roomnum) " +
"VALUES(N'{0}','{1}',N'{2}',N'{3}',N'{4}',N'{5}')"
, name, sex, phone, buildNum, unit, roomNum),
conn
);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
//通過手機號獲得一個賬戶的信息,以DataSet數據類型返回;
//這個函數是爲了在B層通過手機號獲取賬戶的id
public DataSet GetAnAccountByPhone_TO_DataSet(string phone)
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
string.Format("SELECT * FROM owner WHERE phone=N'{0}'", phone),
conn);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
return dSet;
}
public Owner GetAnAccountByPhone_TO_Owner(string phone)
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
string.Format("SELECT * FROM owner WHERE phone=N'{0}'", phone),
conn);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
Owner owner = new Owner();
owner.Oid = Convert.ToInt32(dSet.Tables[0].Rows[0][0].ToString());
owner.Name = dSet.Tables[0].Rows[0][1].ToString();
owner.Sex = Convert.ToChar(dSet.Tables[0].Rows[0][2].ToString());
owner.Phone = dSet.Tables[0].Rows[0][3].ToString();
owner.BuildNum = dSet.Tables[0].Rows[0][4].ToString();
owner.Unit = dSet.Tables[0].Rows[0][5].ToString();
owner.RoomNum = dSet.Tables[0].Rows[0][6].ToString();
conn.Close();
return owner;
}
//通過id獲得一個賬戶的信息,以DataSet數據類型返回
public DataSet GetAnAccountByIndex_TO_DataSet(int index)
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
string.Format("SELECT * FROM owner WHERE Oid={0}", index),
conn);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
return dSet;
}
public Owner GetAnAccountByIndex_TO_Owner(int index)
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
string.Format("SELECT * FROM owner WHERE Oid={0}", index),
conn);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
Owner owner = new Owner();
owner.Oid = Convert.ToInt32(dSet.Tables[0].Rows[0][0].ToString());
owner.Name = dSet.Tables[0].Rows[0][1].ToString();
owner.Sex = Convert.ToChar(dSet.Tables[0].Rows[0][2].ToString());
owner.Phone = dSet.Tables[0].Rows[0][3].ToString();
owner.BuildNum = dSet.Tables[0].Rows[0][4].ToString();
owner.Unit = dSet.Tables[0].Rows[0][5].ToString();
owner.RoomNum = dSet.Tables[0].Rows[0][6].ToString();
conn.Close();
return owner;
}
//修改一行信息
public void UpdateAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum, int index)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format(
"UPDATE owner SET name=N'{0}',sex='{1}',phone=N'{2}',buildnum=N'{3}',unit=N'{4}',roomnum=N'{5}' " +
"WHERE Oid={6}; ", name, sex, phone, buildNum, unit, roomNum, index),
conn
);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
//刪除一行信息
public void DeleteAnAccount(int index)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format("DELETE FROM owner WHERE Oid = {0}", index),
conn);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
}
}
BLayer:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YYYDemo.P_DLayer;
using System.Data;
using System.Text.RegularExpressions;//正則表達式
using System.Runtime.InteropServices;//爲了實現一個彈窗
using YYYDemo.Entity;
namespace YYYDemo.P_BLayer
{
public class BLayer
{
//提示框,這兩行照着寫上即可,不必理解原理,會使用就行
[DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
public static extern int MessageBox(IntPtr handle, String message, String title, int type);
public DataSet GetAllAccount_TO_DataSet()
{
return new DLayer().GetAllAccount_TO_DataSet();
}
public IList<Owner> GetAllAccount()
{
return new DLayer().GetAllAccount();
}
public void B_CloseConn()
{
new DLayer().D_CloseConn();
}
string errorStr = "";//這個也可以設置成局部變量,只不過讓RegularCheck_Add(Update)_TO_Bool函數多傳遞一個參數而已。
//添加賬戶時正則表達式對輸入數據的驗證
private bool RegularCheck_Add_TO_Bool(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
errorStr = "";
bool flag = true;
string rStr_Name = "^[\u4e00-\u9fa5]{2,4}$";//2-4箇中文
string rStr_Phone = @"^\d{11}$";//11位數字
string rStr_BuildNum_Unit_RoomNum = @"^\d{1,3}$";//1-3位數字
if (!Regex.IsMatch(name, rStr_Name))
{
errorStr += "姓名應爲2-4個漢字!\n";
flag = false;
}
if (!Regex.IsMatch(phone, rStr_Phone))
{
errorStr += "號碼應爲11位數字!\n";
flag = false;
}
if (!Regex.IsMatch(buildNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "樓號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(unit, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "單元號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(roomNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "房間號應爲1-3位數字!\n";
flag = false;
}
var owners = GetAllAccount();
bool equal_Phone = false;
bool equal_Position = false;
for (int i = 0; i < owners.Count; i++)
{
if (phone == owners[i].Phone)
equal_Phone = true;
if (
buildNum == owners[i].BuildNum &&
unit == owners[i].Unit &&
roomNum == owners[i].RoomNum
)
equal_Position = true;
}
if (equal_Phone)
{
errorStr += "聯繫電話不能重複!\n";
flag = false;
}
if (equal_Position)
{
errorStr += "住房位置不能重複!\n";
flag = false;
}
return flag;
}
//添加一個賬戶
public string AddAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
if (RegularCheck_Add_TO_Bool(name, sex, phone, buildNum, unit, roomNum))
{
errorStr = "新增業主信息成功!";
new DLayer().AddAnAccount(name, sex, phone, buildNum, unit, roomNum);
}
else
errorStr += "\n新增業主信息失敗!";
return errorStr;
}
//通過手機號獲取該行數據的索引,在U層中爲下面的GetAnAccountByIndex_TO_DataSet()函數提供作用
public int GetIndexByPhone_TO_Int(string phone)
{
return Convert.ToInt32(
new DLayer().GetAnAccountByPhone_TO_Owner(phone).Oid);
//return Convert.ToInt32(
//new DLayer().GetAnAccountByPhone_TO_DataSet(phone).Tables[0].Rows[0][0].ToString());
}
//通過索引獲取該行數據的全部信息,以DataSet數據類型返回
public DataSet GetAnAccountByIndex_TO_DataSet(int index)
{
return new DLayer().GetAnAccountByIndex_TO_DataSet(index);
}
public Owner GetAnAccountBydIndex_TO_Owner(int index)
{
return new DLayer().GetAnAccountByIndex_TO_Owner(index);
}
//修改一個賬戶的信息
public string UpdateAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum, int index)
{
if (RegularCheck_Update_TO_Bool(name, sex, phone, buildNum, unit, roomNum, index))
{
errorStr = "修改業主信息成功!";
new DLayer().UpdateAnAccount(name, sex, phone, buildNum, unit, roomNum, index);
}
else
errorStr += "\n修改業主信息失敗!";
return errorStr;
}
//修改賬戶時正則表達式對輸入數據的驗證
//修改個人信息,需要驗證 手機號 和 住房位置 是否 *跟別人* 重複;還需驗證數據是否合理
private bool RegularCheck_Update_TO_Bool(string name, char sex, string phone, string buildNum, string unit, string roomNum, int index)
{
errorStr = "";
bool flag = true;
string rStr_Name = "^[\u4e00-\u9fa5]{2,4}$";
string rStr_Phone = @"^\d{11}$";
string rStr_BuildNum_Unit_RoomNum = @"^\d{1,3}$";
if (!Regex.IsMatch(name, rStr_Name))
{
errorStr += "姓名應爲2-4個漢字!\n";
flag = false;
}
if (!Regex.IsMatch(phone, rStr_Phone))
{
errorStr += "號碼應爲11位數字!\n";
flag = false;
}
if (!Regex.IsMatch(buildNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "樓號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(unit, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "單元號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(roomNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "房間號應爲1-3位數字!\n";
flag = false;
}
var owners = GetAllAccount();
bool equal_Phone = false;
bool equal_Position = false;
for (int i = 0; i < owners.Count; i++)
{
if (owners[i].Oid != index)
{
if (phone == owners[i].Phone)
equal_Phone = true;
if (
buildNum == owners[i].BuildNum &&
unit == owners[i].Unit &&
roomNum == owners[i].RoomNum
)
equal_Position = true;
}
}
if (equal_Phone)
{
errorStr += "聯繫電話不能重複!\n";
flag = false;
}
if (equal_Position)
{
errorStr += "住房位置不能重複!\n";
flag = false;
}
return flag;
}
//刪除一個賬戶
public string DeleteAnAccount(int index)
{
errorStr = "刪除業主信息成功!";
new DLayer().DeleteAnAccount(index);
return errorStr;
}
}
}
ShowAll.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using YYYDemo.P_BLayer;
namespace P_ULayer
{
public partial class ShowAll : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.gView.DataSource = new BLayer().GetAllAccount();
this.gView.DataBind();
}
protected void gView_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Y_Update" || e.CommandName == "Y_Delete")
{
//獲取 操作列 或者 刪除列 點擊的是GridView的哪一行
int gViewSelect_Index = Convert.ToInt32(e.CommandArgument);
//將點擊的這一行的手機號(因爲手機號不可重複)的業主的Oid字段的值傳給 全局變量 Application["Index"]
Application["Index"] = new BLayer().GetIndexByPhone_TO_Int(
this.gView.Rows[gViewSelect_Index].Cells[2].Text.ToString()
);
//這個代碼塊也就是實現了 : 點擊的哪一行 ---> 手機號 ---> Oid ---> Application["Index"]
}
if (e.CommandName == "Y_Update")
Response.Redirect("AlterAccount.aspx");
if (e.CommandName == "Y_Delete")
{
if (BtnDelete() == 1)
{
new BLayer().DeleteAnAccount(Convert.ToInt32(Application["Index"]));
Response.Redirect("ShowAll.aspx");
}
}
}
protected void gView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.gView.PageIndex = e.NewPageIndex;
gView.DataBind();
}
private int BtnDelete()
{
return BLayer.MessageBox(IntPtr.Zero, "確定要刪除這條數據嗎?", "警告!", 1);
}
}
}
Alteraccount.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
//using System.Data;
using YYYDemo.P_BLayer;
using YYYDemo.Entity;
namespace YYYDemo.P_ULayer
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//這裏若不加此判斷,則每次點擊未修改成功的按鈕後,頁面都會重傳,然後恢復一開始的值,不會保存修改的值
if (!IsPostBack)
{
Owner owner = new BLayer().GetAnAccountBydIndex_TO_Owner(Convert.ToInt32(Application["Index"]));
(Master.FindControl("textBox_Name") as TextBox).Text = owner.Name;
if (owner.Sex == '男')
(Master.FindControl("radioBtn_Boy") as RadioButton).Checked = true;
if (owner.Sex == '女')
(Master.FindControl("radioBtn_Girl") as RadioButton).Checked = true;
(Master.FindControl("textBox_Phone") as TextBox).Text = owner.Phone;
(Master.FindControl("textBox_BuildNum") as TextBox).Text = owner.BuildNum;
(Master.FindControl("textBox_Unit") as TextBox).Text = owner.Unit;
(Master.FindControl("textBox_RoomNum") as TextBox).Text = owner.RoomNum;
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
char sex = '男';
if ((Master.FindControl("radioBtn_Girl") as RadioButton).Checked)
sex = '女';
string message = new BLayer().UpdateAnAccount(
(Master.FindControl("textBox_Name") as TextBox).Text.ToString(),
sex,
(Master.FindControl("textBox_Phone") as TextBox).Text.ToString(),
(Master.FindControl("textBox_BuildNum") as TextBox).Text.ToString(),
(Master.FindControl("textBox_Unit") as TextBox).Text.ToString(),
(Master.FindControl("textBox_RoomNum") as TextBox).Text.ToString(),
Convert.ToInt32(Application["index"])
);
BLayer.MessageBox(IntPtr.Zero, message, "提示!", 0);
}
}
}
2. 刪減多餘代碼後:
DLayer.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using YYYDemo.Entity;
namespace YYYDemo.P_DLayer
{
public class DLayer
{
//創建數據庫連接
private SqlConnection CreateConnection()
{
return new SqlConnection(
"Data Source=DESKTOP-ADKCETM;Initial Catalog=Y_strong;Integrated Security=True"
);
}
//獲取全部的賬戶信息,以Owner實體類類型返回
public IList<Owner> GetAllAccount()
{
List<Owner> owners = new List<Owner>();
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
"SELECT * FROM owner", conn
);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
for (int i = 0; i < dSet.Tables[0].Rows.Count; i++)
{
Owner owner = new Owner();
owner.Oid = Convert.ToInt32(dSet.Tables[0].Rows[i][0].ToString());
owner.Name = dSet.Tables[0].Rows[i][1].ToString();
owner.Sex = Convert.ToChar(dSet.Tables[0].Rows[i][2].ToString());
owner.Phone = dSet.Tables[0].Rows[i][3].ToString();
owner.BuildNum = dSet.Tables[0].Rows[i][4].ToString();
owner.Unit = dSet.Tables[0].Rows[i][5].ToString();
owner.RoomNum = dSet.Tables[0].Rows[i][6].ToString();
owners.Add(owner);
}
conn.Close();
return owners;
}
//添加一個賬戶
public void AddAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format(
"INSERT INTO owner(name,sex,phone,buildnum,unit,roomnum) " +
"VALUES(N'{0}','{1}',N'{2}',N'{3}',N'{4}',N'{5}')"
, name, sex, phone, buildNum, unit, roomNum),
conn
);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
//通過手機號獲得一個賬戶的信息,以Owner實體類類型返回;
//這個函數是爲了在B層通過手機號獲取賬戶的id
public Owner GetAnAccountByPhone_TO_Owner(string phone)
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
string.Format("SELECT * FROM owner WHERE phone=N'{0}'", phone),
conn);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
Owner owner = new Owner();
owner.Oid = Convert.ToInt32(dSet.Tables[0].Rows[0][0].ToString());
owner.Name = dSet.Tables[0].Rows[0][1].ToString();
owner.Sex = Convert.ToChar(dSet.Tables[0].Rows[0][2].ToString());
owner.Phone = dSet.Tables[0].Rows[0][3].ToString();
owner.BuildNum = dSet.Tables[0].Rows[0][4].ToString();
owner.Unit = dSet.Tables[0].Rows[0][5].ToString();
owner.RoomNum = dSet.Tables[0].Rows[0][6].ToString();
conn.Close();
return owner;
}
//通過id獲得一個賬戶的信息,以Owner實體類類型返回
public Owner GetAnAccountByIndex_TO_Owner(int index)
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
string.Format("SELECT * FROM owner WHERE Oid={0}", index),
conn);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
Owner owner = new Owner();
owner.Oid = Convert.ToInt32(dSet.Tables[0].Rows[0][0].ToString());
owner.Name = dSet.Tables[0].Rows[0][1].ToString();
owner.Sex = Convert.ToChar(dSet.Tables[0].Rows[0][2].ToString());
owner.Phone = dSet.Tables[0].Rows[0][3].ToString();
owner.BuildNum = dSet.Tables[0].Rows[0][4].ToString();
owner.Unit = dSet.Tables[0].Rows[0][5].ToString();
owner.RoomNum = dSet.Tables[0].Rows[0][6].ToString();
conn.Close();
return owner;
}
//修改一行信息
public void UpdateAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum, int index)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format(
"UPDATE owner SET name=N'{0}',sex='{1}',phone=N'{2}',buildnum=N'{3}',unit=N'{4}',roomnum=N'{5}' " +
"WHERE Oid={6}; ", name, sex, phone, buildNum, unit, roomNum, index),
conn
);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
//刪除一行信息
public void DeleteAnAccount(int index)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format("DELETE FROM owner WHERE Oid = {0}", index),
conn);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
}
}
BLayer.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YYYDemo.P_DLayer;
using System.Text.RegularExpressions;//正則表達式
using System.Runtime.InteropServices;//爲了實現一個彈窗
using YYYDemo.Entity;
namespace YYYDemo.P_BLayer
{
public class BLayer
{
//提示框,這兩行照着寫上即可,不必理解原理,會使用就行
[DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
public static extern int MessageBox(IntPtr handle, String message, String title, int type);
public IList<Owner> GetAllAccount()
{
return new DLayer().GetAllAccount();
}
string errorStr = "";//這個也可以設置成局部變量,只不過讓RegularCheck_Add(Update)_TO_Bool函數多傳遞一個參數而已。
//添加賬戶時正則表達式對輸入數據的驗證
private bool RegularCheck_Add_TO_Bool(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
errorStr = "";
bool flag = true;
string rStr_Name = "^[\u4e00-\u9fa5]{2,4}$";//2-4箇中文
string rStr_Phone = @"^\d{11}$";//11位數字
string rStr_BuildNum_Unit_RoomNum = @"^\d{1,3}$";//1-3位數字
if (!Regex.IsMatch(name, rStr_Name))
{
errorStr += "姓名應爲2-4個漢字!\n";
flag = false;
}
if (!Regex.IsMatch(phone, rStr_Phone))
{
errorStr += "號碼應爲11位數字!\n";
flag = false;
}
if (!Regex.IsMatch(buildNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "樓號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(unit, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "單元號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(roomNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "房間號應爲1-3位數字!\n";
flag = false;
}
var owners = GetAllAccount();
bool equal_Phone = false;
bool equal_Position = false;
for (int i = 0; i < owners.Count; i++)
{
if (phone == owners[i].Phone)
equal_Phone = true;
if (
buildNum == owners[i].BuildNum &&
unit == owners[i].Unit &&
roomNum == owners[i].RoomNum
)
equal_Position = true;
}
if (equal_Phone)
{
errorStr += "聯繫電話不能重複!\n";
flag = false;
}
if (equal_Position)
{
errorStr += "住房位置不能重複!\n";
flag = false;
}
return flag;
}
//添加一個賬戶
public string AddAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum)
{
if (RegularCheck_Add_TO_Bool(name, sex, phone, buildNum, unit, roomNum))
{
errorStr = "新增業主信息成功!";
new DLayer().AddAnAccount(name, sex, phone, buildNum, unit, roomNum);
}
else
errorStr += "\n新增業主信息失敗!";
return errorStr;
}
//通過手機號獲取該行數據的索引,在U層中爲下面的GetAnAccountByIndex_TO_DataSet()函數提供作用
public int GetIndexByPhone_TO_Int(string phone)
{
return Convert.ToInt32(
new DLayer().GetAnAccountByPhone_TO_Owner(phone).Oid);
}
//通過索引獲取該行數據的全部信息,以Owner實體類類型返回
public Owner GetAnAccountBydIndex_TO_Owner(int index)
{
return new DLayer().GetAnAccountByIndex_TO_Owner(index);
}
//修改一個賬戶的信息
public string UpdateAnAccount(string name, char sex, string phone, string buildNum, string unit, string roomNum, int index)
{
if (RegularCheck_Update_TO_Bool(name, sex, phone, buildNum, unit, roomNum, index))
{
errorStr = "修改業主信息成功!";
new DLayer().UpdateAnAccount(name, sex, phone, buildNum, unit, roomNum, index);
}
else
errorStr += "\n修改業主信息失敗!";
return errorStr;
}
//修改賬戶時正則表達式對輸入數據的驗證
//修改個人信息,需要驗證 手機號 和 住房位置 是否 *跟別人* 重複;還需驗證數據是否合理
private bool RegularCheck_Update_TO_Bool(string name, char sex, string phone, string buildNum, string unit, string roomNum, int index)
{
errorStr = "";
bool flag = true;
string rStr_Name = "^[\u4e00-\u9fa5]{2,4}$";
string rStr_Phone = @"^\d{11}$";
string rStr_BuildNum_Unit_RoomNum = @"^\d{1,3}$";
if (!Regex.IsMatch(name, rStr_Name))
{
errorStr += "姓名應爲2-4個漢字!\n";
flag = false;
}
if (!Regex.IsMatch(phone, rStr_Phone))
{
errorStr += "號碼應爲11位數字!\n";
flag = false;
}
if (!Regex.IsMatch(buildNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "樓號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(unit, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "單元號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(roomNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "房間號應爲1-3位數字!\n";
flag = false;
}
var owners = GetAllAccount();
bool equal_Phone = false;
bool equal_Position = false;
for (int i = 0; i < owners.Count; i++)
{
if (owners[i].Oid != index)
{
if (phone == owners[i].Phone)
equal_Phone = true;
if (
buildNum == owners[i].BuildNum &&
unit == owners[i].Unit &&
roomNum == owners[i].RoomNum
)
equal_Position = true;
}
}
if (equal_Phone)
{
errorStr += "聯繫電話不能重複!\n";
flag = false;
}
if (equal_Position)
{
errorStr += "住房位置不能重複!\n";
flag = false;
}
return flag;
}
//刪除一個賬戶
public string DeleteAnAccount(int index)
{
errorStr = "刪除業主信息成功!";
new DLayer().DeleteAnAccount(index);
return errorStr;
}
}
}
ShowAll.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using YYYDemo.P_BLayer;
namespace P_ULayer
{
public partial class ShowAll : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.gView.DataSource = new BLayer().GetAllAccount();
this.gView.DataBind();
}
protected void gView_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Y_Update" || e.CommandName == "Y_Delete")
{
//獲取 操作列 或者 刪除列 點擊的是GridView的哪一行
int gViewSelect_Index = Convert.ToInt32(e.CommandArgument);
//將點擊的這一行的手機號(因爲手機號不可重複)的業主的Oid字段的值傳給 全局變量 Application["Index"]
Application["Index"] = new BLayer().GetIndexByPhone_TO_Int(
this.gView.Rows[gViewSelect_Index].Cells[2].Text.ToString()
);
//這個代碼塊也就是實現了 : 點擊的哪一行 ---> 手機號 ---> Oid ---> Application["Index"]
}
if (e.CommandName == "Y_Update")
Response.Redirect("AlterAccount.aspx");
if (e.CommandName == "Y_Delete")
{
if (BtnDelete() == 1)
{
new BLayer().DeleteAnAccount(Convert.ToInt32(Application["Index"]));
Response.Redirect("ShowAll.aspx");
}
}
}
protected void gView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.gView.PageIndex = e.NewPageIndex;
gView.DataBind();
}
private int BtnDelete()
{
return BLayer.MessageBox(IntPtr.Zero, "確定要刪除這條數據嗎?", "警告!", 1);
}
}
}
AlterAccount.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using YYYDemo.P_BLayer;
using YYYDemo.Entity;
namespace YYYDemo.P_ULayer
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//這裏若不加此判斷,則每次點擊未修改成功的按鈕後,頁面都會重傳,然後恢復一開始的值,不會保存修改的值
if (!IsPostBack)
{
Owner owner = new BLayer().GetAnAccountBydIndex_TO_Owner(Convert.ToInt32(Application["Index"]));
(Master.FindControl("textBox_Name") as TextBox).Text = owner.Name;
if (owner.Sex == '男')
(Master.FindControl("radioBtn_Boy") as RadioButton).Checked = true;
if (owner.Sex == '女')
(Master.FindControl("radioBtn_Girl") as RadioButton).Checked = true;
(Master.FindControl("textBox_Phone") as TextBox).Text = owner.Phone;
(Master.FindControl("textBox_BuildNum") as TextBox).Text = owner.BuildNum;
(Master.FindControl("textBox_Unit") as TextBox).Text = owner.Unit;
(Master.FindControl("textBox_RoomNum") as TextBox).Text = owner.RoomNum;
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
char sex = '男';
if ((Master.FindControl("radioBtn_Girl") as RadioButton).Checked)
sex = '女';
string message = new BLayer().UpdateAnAccount(
(Master.FindControl("textBox_Name") as TextBox).Text.ToString(),
sex,
(Master.FindControl("textBox_Phone") as TextBox).Text.ToString(),
(Master.FindControl("textBox_BuildNum") as TextBox).Text.ToString(),
(Master.FindControl("textBox_Unit") as TextBox).Text.ToString(),
(Master.FindControl("textBox_RoomNum") as TextBox).Text.ToString(),
Convert.ToInt32(Application["index"])
);
BLayer.MessageBox(IntPtr.Zero, message, "提示!", 0);
}
}
}
運行測試,都正常
注:
- 添加實體類後,修改DLayer的代碼,是將以DataSet爲返回值的函數作爲想要修改的函數去修改
- 修改完代碼後,要保證,除了在D層的DLayer代碼有 System.Data 的引用後,其餘各層均沒有
把多餘的Class1刪掉,現在的結構是下圖所示:
在不適用實體類的時候,GridView的列的DataField的值必須對應數據表中的字段的名稱,若數據表的結構修改,則程序會報錯。
現在使用上了實體類之後,U層的GridView 的列的DataField 的值是對應了實體類的屬性名稱,這裏雖然沒變,是因爲我在設計實體類的時候,寫實體類的屬性名稱是仿照着數據表的字段名稱來的,所以這裏的DataField的值雖然沒變,但是其實是已經映射到了實體類的屬性名稱上,而不是數據表的字段名稱上。
也就是說,比如我將實體類的Name屬性的名稱修改爲MMMM,然後在DLayer和AlterAccount頁面上用到該實體類的Name屬性的地方全部修改爲MMMM,最後將ShowAll頁面的GridView的某一列的DataField屬性的值設置爲MMMM,則程序正常運行。
2.14 繼續修改代碼,將D層的新增和修改函數的形參修改爲Owner實體類對象
D層項目:
將一連串的形參修改爲了一個Owner類型的形參
B層項目:
同樣的,修改B層的AlterAccount函數,也是需要像AddAccount函數一樣去改變形參。
接下來就不上圖了,直接放B層和D層目前的代碼。
B層BLayer:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YYYDemo.P_DLayer;
using System.Text.RegularExpressions;//正則表達式
using System.Runtime.InteropServices;//爲了實現一個彈窗
using YYYDemo.Entity;
namespace YYYDemo.P_BLayer
{
public class BLayer
{
//提示框,這兩行照着寫上即可,不必理解原理,會使用就行
[DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
public static extern int MessageBox(IntPtr handle, String message, String title, int type);
public IList<Owner> GetAllAccount()
{
return new DLayer().GetAllAccount();
}
string errorStr = "";//這個也可以設置成局部變量,只不過讓RegularCheck_Add(Update)_TO_Bool函數多傳遞一個參數而已。
//添加賬戶時正則表達式對輸入數據的驗證
private bool RegularCheck_Add_TO_Bool(Owner _owner)
{
errorStr = "";
bool flag = true;
string rStr_Name = "^[\u4e00-\u9fa5]{2,4}$";//2-4箇中文
string rStr_Phone = @"^\d{11}$";//11位數字
string rStr_BuildNum_Unit_RoomNum = @"^\d{1,3}$";//1-3位數字
if (!Regex.IsMatch(_owner.Name, rStr_Name))
{
errorStr += "姓名應爲2-4個漢字!\n";
flag = false;
}
if (!Regex.IsMatch(_owner.Phone, rStr_Phone))
{
errorStr += "號碼應爲11位數字!\n";
flag = false;
}
if (!Regex.IsMatch(_owner.BuildNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "樓號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(_owner.Unit, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "單元號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(_owner.RoomNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "房間號應爲1-3位數字!\n";
flag = false;
}
var owners = GetAllAccount();
bool equal_Phone = false;
bool equal_Position = false;
for (int i = 0; i < owners.Count; i++)
{
if (_owner.Phone == owners[i].Phone)
equal_Phone = true;
if (
_owner.BuildNum == owners[i].BuildNum &&
_owner.Unit == owners[i].Unit &&
_owner.RoomNum == owners[i].RoomNum
)
equal_Position = true;
}
if (equal_Phone)
{
errorStr += "聯繫電話不能重複!\n";
flag = false;
}
if (equal_Position)
{
errorStr += "住房位置不能重複!\n";
flag = false;
}
return flag;
}
//添加一個賬戶
public string AddAnAccount(Owner owner)
{
if (RegularCheck_Add_TO_Bool(owner))
{
errorStr = "新增業主信息成功!";
new DLayer().AddAnAccount(owner);
}
else
errorStr += "\n新增業主信息失敗!";
return errorStr;
}
//通過手機號獲取該行數據的索引,在U層中爲下面的GetAnAccountByIndex_TO_DataSet()函數提供作用
public int GetIndexByPhone_TO_Int(string phone)
{
return Convert.ToInt32(
new DLayer().GetAnAccountByPhone_TO_Owner(phone).Oid);
}
//通過索引獲取該行數據的全部信息,以Owner實體類類型返回
public Owner GetAnAccountBydIndex_TO_Owner(int index)
{
return new DLayer().GetAnAccountByIndex_TO_Owner(index);
}
//修改賬戶時正則表達式對輸入數據的驗證
//修改個人信息,需要驗證 手機號 和 住房位置 是否 *跟別人* 重複;還需驗證數據是否合理
private bool RegularCheck_Update_TO_Bool(Owner _owner)
{
errorStr = "";
bool flag = true;
string rStr_Name = "^[\u4e00-\u9fa5]{2,4}$";
string rStr_Phone = @"^\d{11}$";
string rStr_BuildNum_Unit_RoomNum = @"^\d{1,3}$";
if (!Regex.IsMatch(_owner.Name, rStr_Name))
{
errorStr += "姓名應爲2-4個漢字!\n";
flag = false;
}
if (!Regex.IsMatch(_owner.Phone, rStr_Phone))
{
errorStr += "號碼應爲11位數字!\n";
flag = false;
}
if (!Regex.IsMatch(_owner.BuildNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "樓號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(_owner.Unit, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "單元號應爲1-3位數字!\n";
flag = false;
}
if (!Regex.IsMatch(_owner.RoomNum, rStr_BuildNum_Unit_RoomNum))
{
errorStr += "房間號應爲1-3位數字!\n";
flag = false;
}
var owners = GetAllAccount();
bool equal_Phone = false;
bool equal_Position = false;
for (int i = 0; i < owners.Count; i++)
{
if (owners[i].Oid != _owner.Oid)
{
if (_owner.Phone == owners[i].Phone)
equal_Phone = true;
if (
_owner.BuildNum == owners[i].BuildNum &&
_owner.Unit == owners[i].Unit &&
_owner.RoomNum == owners[i].RoomNum
)
equal_Position = true;
}
}
if (equal_Phone)
{
errorStr += "聯繫電話不能重複!\n";
flag = false;
}
if (equal_Position)
{
errorStr += "住房位置不能重複!\n";
flag = false;
}
return flag;
}
//修改一個賬戶的信息
public string UpdateAnAccount(Owner owner)
{
if (RegularCheck_Update_TO_Bool(owner))
{
errorStr = "修改業主信息成功!";
new DLayer().UpdateAnAccount(owner);
}
else
errorStr += "\n修改業主信息失敗!";
return errorStr;
}
//刪除一個賬戶
public string DeleteAnAccount(int index)
{
errorStr = "刪除業主信息成功!";
new DLayer().DeleteAnAccount(index);
return errorStr;
}
}
}
D層DLayer:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using YYYDemo.Entity;
namespace YYYDemo.P_DLayer
{
public class DLayer
{
//創建數據庫連接
private SqlConnection CreateConnection()
{
return new SqlConnection(
"Data Source=DESKTOP-ADKCETM;Initial Catalog=Y_strong;Integrated Security=True"
);
}
//獲取全部的賬戶信息,以Owner實體類類型返回
public IList<Owner> GetAllAccount()
{
List<Owner> owners = new List<Owner>();
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
"SELECT * FROM owner", conn
);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
for (int i = 0; i < dSet.Tables[0].Rows.Count; i++)
{
Owner owner = new Owner();
owner.Oid = Convert.ToInt32(dSet.Tables[0].Rows[i][0].ToString());
owner.Name = dSet.Tables[0].Rows[i][1].ToString();
owner.Sex = Convert.ToChar(dSet.Tables[0].Rows[i][2].ToString());
owner.Phone = dSet.Tables[0].Rows[i][3].ToString();
owner.BuildNum = dSet.Tables[0].Rows[i][4].ToString();
owner.Unit = dSet.Tables[0].Rows[i][5].ToString();
owner.RoomNum = dSet.Tables[0].Rows[i][6].ToString();
owners.Add(owner);
}
conn.Close();
return owners;
}
//添加一個賬戶
public void AddAnAccount(Owner owner)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format(
"INSERT INTO owner(name,sex,phone,buildnum,unit,roomnum) " +
"VALUES(N'{0}','{1}',N'{2}',N'{3}',N'{4}',N'{5}')"
, owner.Name, owner.Sex, owner.Phone, owner.BuildNum, owner.Unit, owner.RoomNum),
conn
);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
//通過手機號獲得一個賬戶的信息,以Owner實體類類型返回;
//這個函數是爲了在B層通過手機號獲取賬戶的id
public Owner GetAnAccountByPhone_TO_Owner(string phone)
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
string.Format("SELECT * FROM owner WHERE phone=N'{0}'", phone),
conn);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
Owner owner = new Owner();
owner.Oid = Convert.ToInt32(dSet.Tables[0].Rows[0][0].ToString());
owner.Name = dSet.Tables[0].Rows[0][1].ToString();
owner.Sex = Convert.ToChar(dSet.Tables[0].Rows[0][2].ToString());
owner.Phone = dSet.Tables[0].Rows[0][3].ToString();
owner.BuildNum = dSet.Tables[0].Rows[0][4].ToString();
owner.Unit = dSet.Tables[0].Rows[0][5].ToString();
owner.RoomNum = dSet.Tables[0].Rows[0][6].ToString();
conn.Close();
return owner;
}
//通過id獲得一個賬戶的信息,以Owner實體類類型返回
public Owner GetAnAccountByIndex_TO_Owner(int index)
{
SqlConnection conn = CreateConnection();
conn.Open();
SqlDataAdapter dAdp = new SqlDataAdapter(
string.Format("SELECT * FROM owner WHERE Oid={0}", index),
conn);
DataSet dSet = new DataSet();
dAdp.Fill(dSet, "owner");
Owner owner = new Owner();
owner.Oid = Convert.ToInt32(dSet.Tables[0].Rows[0][0].ToString());
owner.Name = dSet.Tables[0].Rows[0][1].ToString();
owner.Sex = Convert.ToChar(dSet.Tables[0].Rows[0][2].ToString());
owner.Phone = dSet.Tables[0].Rows[0][3].ToString();
owner.BuildNum = dSet.Tables[0].Rows[0][4].ToString();
owner.Unit = dSet.Tables[0].Rows[0][5].ToString();
owner.RoomNum = dSet.Tables[0].Rows[0][6].ToString();
conn.Close();
return owner;
}
//修改一行信息
public void UpdateAnAccount(Owner owner)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format(
"UPDATE owner SET name=N'{0}',sex='{1}',phone=N'{2}',buildnum=N'{3}',unit=N'{4}',roomnum=N'{5}' " +
"WHERE Oid={6}; ", owner.Name, owner.Sex, owner.Phone, owner.BuildNum, owner.Unit, owner.RoomNum, owner.Oid),
conn
);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
//刪除一行信息
public void DeleteAnAccount(int index)
{
SqlConnection conn = CreateConnection();
SqlCommand cmd = new SqlCommand(
string.Format("DELETE FROM owner WHERE Oid = {0}", index),
conn);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
}
}
}
修改U層的新增和修改部分的代碼:
AddAccount.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using YYYDemo.P_BLayer;
using YYYDemo.Entity;
namespace YYYDemo.P_ULayer
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
char sex = '男';
if ((Master.FindControl("radioBtn_Girl") as RadioButton).Checked)
sex = '女';
Owner owner = new Owner();
owner.Name = (Master.FindControl("textBox_Name") as TextBox).Text.ToString();
owner.Sex = sex;
owner.Phone = (Master.FindControl("textBox_Phone") as TextBox).Text.ToString();
owner.BuildNum = (Master.FindControl("textBox_BuildNum") as TextBox).Text.ToString();
owner.Unit = (Master.FindControl("textBox_Unit") as TextBox).Text.ToString();
owner.RoomNum = (Master.FindControl("textBox_RoomNum") as TextBox).Text.ToString();
string message = new BLayer().AddAnAccount(owner);
BLayer.MessageBox(IntPtr.Zero, message, "提示!", 0);
}
}
}
AlterAccount.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using YYYDemo.P_BLayer;
using YYYDemo.Entity;
namespace YYYDemo.P_ULayer
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//這裏若不加此判斷,則每次點擊未修改成功的按鈕後,頁面都會重傳,然後恢復一開始的值,不會保存修改的值
if (!IsPostBack)
{
Owner owner = new BLayer().GetAnAccountBydIndex_TO_Owner(Convert.ToInt32(Application["Index"]));
(Master.FindControl("textBox_Name") as TextBox).Text = owner.Name;
if (owner.Sex == '男')
(Master.FindControl("radioBtn_Boy") as RadioButton).Checked = true;
if (owner.Sex == '女')
(Master.FindControl("radioBtn_Girl") as RadioButton).Checked = true;
(Master.FindControl("textBox_Phone") as TextBox).Text = owner.Phone;
(Master.FindControl("textBox_BuildNum") as TextBox).Text = owner.BuildNum;
(Master.FindControl("textBox_Unit") as TextBox).Text = owner.Unit;
(Master.FindControl("textBox_RoomNum") as TextBox).Text = owner.RoomNum;
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
char sex = '男';
if ((Master.FindControl("radioBtn_Girl") as RadioButton).Checked)
sex = '女';
Owner owner = new Owner();
owner.Oid = Convert.ToInt32(Application["index"]);
owner.Name = (Master.FindControl("textBox_Name") as TextBox).Text.ToString();
owner.Sex = sex;
owner.Phone = (Master.FindControl("textBox_Phone") as TextBox).Text.ToString();
owner.BuildNum = (Master.FindControl("textBox_BuildNum") as TextBox).Text.ToString();
owner.Unit = (Master.FindControl("textBox_Unit") as TextBox).Text.ToString();
owner.RoomNum = (Master.FindControl("textBox_RoomNum") as TextBox).Text.ToString();
string message = new BLayer().UpdateAnAccount(owner);
BLayer.MessageBox(IntPtr.Zero, message, "提示!", 0);
}
}
}
運行,測試功能,沒問題。
分割線二
到這裏已經實現實現了實體類。
2019年5月22日23:39:08