版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第八章三層架構(gòu)設(shè)計所謂的三層架構(gòu)就是將整個業(yè)務(wù)應(yīng)用劃分怎么辦?網(wǎng)頁代碼文件中的所有程序都要重新多層開發(fā)架構(gòu)的出現(xiàn)很有效的解決了這樣三層架構(gòu)中,各個層之間的分工是很明確們只需要修改數(shù)據(jù)訪問層,其它的地方不用修等,并針對用戶的請求去調(diào)用業(yè)務(wù)邏輯層的功2、業(yè)務(wù)邏輯層(BLL):針對表示層提交的3、數(shù)據(jù)訪問層(DAL):顧名思義,就是用于專門跟后臺數(shù)據(jù)庫進行交互,直接操縱數(shù)據(jù)表表示層業(yè)務(wù)邏SQLServerAccessOracle實體理想的分層式架構(gòu),應(yīng)該是一個支持可抽這個框架模型中,出現(xiàn)了一個自定義實體的實體類都是“貧血實體類”。體類對應(yīng)數(shù)據(jù)庫的表。但是有些專家意見是慎圖7.2顯示了實體對象在三層架構(gòu)中傳遞用。仍以“BookShopOnNet”數(shù)據(jù)庫中顧客表顧客表的結(jié)構(gòu)為:ShopUser(UserIdintNOTNULL,Passwordsvarchar(20)NOTNULL,Emailvarchar(30),XinMinnvarchar(5),Sexbit,Birthdaydatetime,Addressnvarchar(50),Telvarchar(12),Photovarchar(50),Nationnvarchar(15),Hobbyvarchar(50),PersonURLvarchar(50)。詳細(xì)說下面來構(gòu)建這個應(yīng)用程序解決方案。啟動8.2.1實體類設(shè)計“ThreeLayerApp”解決方案名,在彈出的快捷項目名“BookShopModel”并確定,這樣就在此成員變量,并依據(jù)這些成員變量構(gòu)建相應(yīng)的屬當(dāng)類的私有成員變量輸好后,屬性可以用publicclassShopUserModel{privateint_UserId;privatestring_UserName;publicintUserId{get{return_UserId;}set{_UserId=value;}}publicstringUserName{get{return_UserName;}set{_UserName=value;}}}8.2.2數(shù)據(jù)訪問層設(shè)計首先在解決方案中添加名為創(chuàng)建的項目名為“BookShopModel”的實體類,“ShopUserDAL”數(shù)據(jù)訪問類,此類中要進行數(shù)usingSystem.Configuration;usingSystem.Data;usingSystem.Data.SqlClient;usingBookShopModel;這樣構(gòu)建出來的顧客表所對就的數(shù)據(jù)訪問publicclassShopUserDAL{staticstringstrconn=ConfigurationManagerConfigurationManager.ConnectionStrings["connStr"].ConnectionString;SqlConnectionconn;publicShopUserDAL(){}///<summary>///獲取顧客信息數(shù)據(jù)表視圖///</summary>///<returns></returns>publicDataViewGetDataView(){SqlCommandcomm=newSqlCommand("SELECTUserId,UserName,Passwords,Email,XinMin,Sex,Birthday,Address,Tel,Photo,Natnusing(SqlDataAdaptersda=newSqlDataAdapter()){sda.SelectCommand=comm;DataSetds=newDataSet();sda.Fill(ds,"ShopUser");ds.Tables["ShopUser"].DefaultView;}}publicintDeleteByUserId(intUserId){sqltext=string.Format("DeleteFROMShopUserWHEREUserId={0}",UserId);using(SqlCommandcomm=newSqlCommand(sqltext,conn)){intresult=comm.ExecuteNonQuery();ereturnresult;}}UpdatePartInfoByUserId(ShopUserModel{=string=string.Format("UPDATEShopUserXinMin='{1}',Sex='{2}',Birthday='{3}',Email='{4}'WHEREUserId={0}",objUser.UserId,objUser.XinMin,objUser.Sex,objUser.Birthday,objUser.Email);using(SqlCommandcomm=newSqlCommand(sqltext,conn)){intresult=comm.ExecuteNonQuery();ereturnresult;}}UpdateByUserId(ShopUserModelobjUser){stringFormat("UPDATEUserName='{1}',=Email='{2}',XinMin='{3}',Sex='{4}',Birthday='{5}',Address='{6}',Tel='{7}',Photo='{8}',Nation='{9}',Hobby='{10}',PersonURL='objUser.UserName,objUser.Email,objUser.XinMin,objUser.Sex,objUser.Birthday,objUser.Address,nobjUser.Hobby,objUser.PersonURL);using(SqlCommandcomm=newSqlCommand(sqltext,conn)){intresult=comm.ExecuteNonQuery();sereturnresult;}}}publicShopUserModelGetModelByUserId(intUserId){ShopUserModelobjUser=newShopUserModel();stringstrSql="SELECTUserId,UserName,Passwords,Email,XinMin,Sex,Birthday,Address,Tel,Photo,Nation,Hobby,PersonURLFROMShopUserWHEREUserId="+UserId.ToString();using(SqlCommandcomm=newSqlCommand(strSql,conn)){using(SqlDataReadersdr=comm.ExecuteReader()){{erUserId=ConvertConvert.ToInt32(sdr["UserId"].ToString());jUserUserNamesdr["UserName"].ToString();bjUserPasswordssdr["Passwords"].ToString();erEmailsdr["Email"].ToString();serXinMinsdr["XinMin"].ToString();{erSexConvert.ToBoolean(sdr["Sex"]);}{objUser.Birthday=Convert.ToDateTime(sdr["Birthday"]);}=====objUserobjUser.Addresssdr["Address"].ToString();Telsdr["Tel"].ToString();Photosdr["Photo"].ToString();rNationsdr["Nation"].ToString();Hobbysdr["Hobby"].ToString();objUser.PersonURLsdr["PersonURL"].ToString();}}e}returnobjUser;}}======8.2.3業(yè)務(wù)邏輯層設(shè)計在解決方案中添加名為“BookShopModel”實體類項目和這樣構(gòu)建出來的顧客表所對就的數(shù)據(jù)訪問publicclassShopUserBLL{ShopUserDALoShopUserDAL=newShopUserDAL();///<summary>///</summary>///<returns></returns>publicpublicDataViewGetDataView(){oShopUserDAL.GetDataView();}///<summary>///</summary>///<paramname="UserId"></param>///<returns></returns>publicintDeleteByUserId(intUserId){oShopUserDAL.DeleteByUserId(UserId);}///<summary>///</summary>///<returns></returns>UpdatePartInfoByUserId(ShopUserModel{oShopUserDAL.UpdatePartInfoByUserId(objUs}///<summary>///</summary>///<returns></returns>publicintUpdateByUserId(ShopUserModelobjUser){oShopUserDAL.UpdateByUserId(objUser);}///<summary>///</summary>///<paramname="UserId"></param>///<returns></returns>publicShopUserModelGetModelByUserId(intUserId){oShopUserDAL.GetModelByUserId(UserId);}}8.2.4表示層設(shè)計在解決方案中添加名為“WebSite”的站點編寫相關(guān)的事件,在事件中調(diào)用底層提供的功件之一,它以表格的形式顯示數(shù)據(jù)庫的內(nèi)容。AutoGenerateColumns屬性為True,GridView會使用反射來處理所有字段并按發(fā)現(xiàn)BoundField:以文本形式顯示數(shù)據(jù)的普通綁定“DataField”屬性設(shè)置數(shù)據(jù)從數(shù)據(jù)源的哪個字“DataNavigateUrlFormatString”兩個屬性,配合構(gòu)建超鏈接的URL,用“DataTextField”還有一個DataField和來設(shè)置要綁定顯示的數(shù)據(jù)列名,DataTextFormatString屬性用來對DataField例如,我們想在GridView顯示ShopUser列的標(biāo)題是“出生日期”。對于HyperLinkField列,還有DataNavigateUrlFields和配合構(gòu)建超鏈接的URL。比如:而DataNavigateUrlFormatString屬性的值為string.Format("ShowUser.aspx?UserId={0}",UserId字符串。置各字段顯示時的樣式,如利用HeadStyle、HeaderTemplate:頭模板,即表頭部分使用的FooterTemplate:腳模板,即腳注部分使用的EditItemTemplate:編輯項模板,數(shù)據(jù)處于編最后利用TemplateField的HeadStyle、如果GridView的數(shù)據(jù)源是一個另一個與分頁有關(guān)的事件PageIndexChanged,PageIndex屬性:獲取或設(shè)置當(dāng)前顯示頁的索SortExpression屬性,它是數(shù)據(jù)源中的相應(yīng)字ingSortExpress屬性:通過它設(shè)置作為排序列的AutoGenerateColumns屬性:設(shè)置是否自動創(chuàng)建綁定字段,默認(rèn)為true,實際開發(fā)中很少自Columns屬性:GridView控件中列字段的集它以后,從DataKeys[]主鍵集合中就可以取出GridView必須把主鍵字段做成數(shù)組后賦給其{"UserId"};GridView1.DataKeyNames=該行進入編輯狀態(tài),當(dāng)它的值為-1時,退出編PageIndexChanging/PageIndexChanged:這兩個事件分別在改變當(dāng)前頁索引之前/之后發(fā)SelectedIndexChanging/某行的選擇按鈕(其CommandName屬性值為“Select”的按鈕)之前/之后發(fā)生,在選擇功Sorting/Sorted:這兩個事件分別在單擊列RowCommand:在GridView中單擊按鈕時就會發(fā)生,所以其中包含的多個按鈕都會觸發(fā)此事RowDeleting/RowDeleted:單擊某行的刪除鈕)時,在從數(shù)據(jù)源刪除記錄之前/之后發(fā)生,CommandName屬性值為“Cancel”的按鈕)時發(fā)RowUpdating/RowUpdated:單擊某行的更新按鈕(其CommandName屬性值為“Update”的按鈕)后,在更新數(shù)據(jù)源記錄之前/之后發(fā)生,DeleteCommand、UpdateCommand事件的發(fā)生機情頁,電子郵件也是超鏈接,單擊它自動利用錄進行全面編輯。GridView控件應(yīng)用之一。單擊右上方“編輯列”快捷菜單,利用、、、、SortExpression屬性值,沒有設(shè)置SortExpression屬性的列不啟用排序。利用利用HyperLinkField,添加姓名、電子郵件、常瀏覽網(wǎng)址和編輯3個列,設(shè)置它們的DataNavigateUrlFielde超鏈接列轉(zhuǎn)為模板列后列屬性設(shè)計界面加一個模板列TemplateField,然后設(shè)計它的的寬度和水平對齊等屬性,最后進入“編輯模“Eval("Sex").ToString()=="True"?"男":"女板列。先添加一個模板列,設(shè)計好它的標(biāo)題HeaderText及列寬,然后進入年齡列模板的項的代碼privatevoidDataBindToGridView(){string[]UserKey=this.GridView1.DataSource=oShopUserDAL.GetDataView();this.GridView1.DataKeyNames=UserKey;標(biāo)簽的Text屬性綁定到表達式(1)事件的編寫定protectedvoidPageprotectedvoidPage_Load(objectEventArgse)}e.e.Row.Attributes.Add("onmouseover",backgroundColor='LightBlue';");e.Row.Attributes.Add("onmouseout",}}this.GridView1.DataBind();}protectedprotectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse){if(e.Row.RowType==是數(shù)據(jù)行{RowType是玫舉類型DataControlRowType排序事件,為了克服WEB應(yīng)用程序的無狀DataView具有排序功能,只需指定排序關(guān)鍵字protectedvoidGridView1_Sorting(objectsender,GridViewSortEventArgse){if(ViewState["SortDirection"]==ViewState["SortDirection"]={(ViewState["SortDirection"].ToString()==ViewState["SortDirection"]=ViewState["SortDirection"]=}ViewState["SortKey"]=e.SortExpression;DataViewdv=oShopUserDAL.GetDataView();dv.Sort=ViewState["SortKey"].ToString()+""+ViewState["SortDirection"].ToString();this.GridView1.DataSource=dv;this.GridView1.DataBind();}protectedvoidGridView1_PageIndexChanging(objectsender,GridViewPageEventArgse){GridView1.PageIndex=e.NewPageIndex;DataBindToGridView();}然后設(shè)置它的“CommandName”為“Delete”。值,可以根據(jù)設(shè)定的DataKeyNames屬性,用啟用編輯有兩種方式,一是用超鏈接的方編輯事件的代碼中,主要用“this.GridView1.EditIndex=取消事件的代碼中,主要用子郵件”四個字段進行更新,其中“電子郵件”綁定數(shù)據(jù)源,選中GridView,設(shè)置行高,網(wǎng)絡(luò)單擊右上方“編輯列”快捷菜單,利用TemplateField。為此把所有的列都轉(zhuǎn)換成模板有轉(zhuǎn)換后才能為刪除按鈕添加確認(rèn)對話框,為CommandArgument。把按鈕列轉(zhuǎn)換為模板后,設(shè)EditItemTemplate中內(nèi)容刪空,因為沒有定義EditItemTemplate的列在編輯狀態(tài)時會使用“姓名”列模板項的設(shè)計界面擊它的“編輯項”快捷菜單,靜態(tài)綁定“男”Value”值,如圖右下所示,并把單選按鈕組“性別”列模板項的設(shè)計界面<asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="False"onrowcancelingedit="GridView1_RowCancelinonrowdeleting="GridView1_RowDeleting"onrowediting="GridView1_RowEditing"onrowupdating="GridView1_RowUpdating">s<asp:TemplateFieldHeaderText="編號">laterunat="server"Text='<%#Eval("UserId")%>'></asp:Label>emplate</asp:TemplateField>lateText='<%#runat="server"Eval("UserName")%>'/>emplate</asp:TemplateField><asp:TemplateFieldHeaderText="姓名">EditItemTemplate><asp:TextBoxID="txtXinMin"runat="server"Text='<%#Bind("XinMin")%>'/></EditItemTemplate>late<<asp:HyperLinkID="HyperLink2"runat="server"NavigateUrl='<%#Eval("UserId","ShowShopUserById.aspx?UserId={0}")%>'Text='<%#Eval("XinMin")%>'/>emplate</asp:TemplateField><asp:TemplateFieldHeaderText="性別">EditItemTemplate><asp:RadioButtonListID="rblSex"runat="server"RepeatDirection="Horizontal"SelectedValue='<%#Bind("Sex")%>'><asp:ListItemValue="True">tItem<asp:ListItemValue="False">aspListItem></asp:RadioButtonList></EditItemTemplate>lateaspaspGridView>(2)事件的編寫EvalEval("Sex").ToString()=="True"?"男":"女"%>'/>emplate定protectedvoidPage_Load(objectEventArgse){}調(diào)用的綁定代碼privateprivatevoidDataBindToGridView(){string[]UserKey={"UserId"};//GridView設(shè)置主鍵,主鍵必須是數(shù)組,與this.GridView1.DataSourceoShopUserDAL.GetDataView();=thisthis.GridView1.DataKeyNames=UserKey;this.GridView1.DataBind();}sender,GridViewEditEventArgse){this.GridView1.EditIndex=e.NewEditIndex;//設(shè)置編輯行索引就進入編DataBindToGridView();}protectedvoidGridView1_RowCancelingEdit(objectsender,GridViewCancelEditEventArgse){this.GridView1.EditIndex=-1;//設(shè)編DataBindToGridView();}protectedGridView1_RowDeleting(objectGridViewDeleteEventArgse){//intUserId=Convert.ToInt32(this.GridView1.DataKeys[e.RowIndex].Value);intUserId=Convert.ToInt32(((LinkButton)(this.GridView1.Rows[e.RowIndex].FindControlintresult=oShopUserDAL.DeleteByUserId(UserId);Response.Write("<script>alert('刪除ResponseResponse.Write("<script>alert('刪除DataBindToGridView();}protectedGridView1_RowUpdating(objectGridViewUpdateEventArgse){ShopUserModelobjUser=newShopUserModel();objUser.UserId=Convert.ToInt32(((Label)GridView1.Rows[e.RowIndex].FindControl//objUser.UserId=Convert.ToInt32(this.GridView1.DataKeys[e.RowIndex].Value);//objUser.UserId=Convert.ToInt32(((LinkButton)(this.GridView1.Rows[e.RowIndex].FindControlFindControl("lbnDelete"))).CommandArgumenUserIdobjUser.XinMin=((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtXinMin")).Text;objUser.Sex=Convert.ToBoolean((GridView1.Rows[e.RowIn==oShopUserDAL.UpdatePartInfoByUserId(objUsdex].FindControl("rblSex")RadioButtonList).SelectedValue);控件的類型轉(zhuǎn)換objUser.BirthdaydControltxtEmail")asTextBox).Text;ndex].FindControlTextBox).Text);objUserEmailConvert.ToDateTime((GridView1.Rows[e.RowI("txtBirthday")asthis.GridView1.EditIndex=-1;//更新態(tài)DataBindToGridView();}它的“AutoPostBack”屬性為“True”然后為此種格式等寬顯示,如圖所示,并配置好成為<asp:GridViewID="GridView1"runat="server"……><asp:TemplateField>rTemplate<asp:CheckBoxID="chkAll"runat="server"AutoPostBack="True"Text="oncheckedchanged="oncheckedchanged="chkAll_CheckedChanged"aderTemplateatepGridView(2)事件的編寫<<asp:CheckBoxID="chkItem"runat="server"/>mplate</asp:TemplateField>aterunat="server"Text='<%#"{0:yyyy-MM-dd}")%>'onFocus="WdatePicker()"></asp:TextBox>mplate</asp:TemplateField>Bind("Birthday",Width="80px"定protectedvoidPage_Load(objectsender,EventArgse){}調(diào)用的綁定代碼privatevoidDataBindToGridView(){this.GridView1.DataSource=oShopUserDAL.GetDataView();this.GridView1.DataKeyNames=newthis.GridView1.DataBind();}protectedGridView1_RowDataBound(objectGridViewRowEventArgse){DataControlRowType.DataRow){stringtxtSexLabel).Text;//查找性別文本e.Row.Cells[4].ForeColorSystem.Drawing.Color.Red;//改為紅色====}}protectedchkAll_CheckedChanged(objectEvent
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家禽養(yǎng)殖購銷合同范例
- 2025試用期勞動合同是否合法
- 電梯過戶合同范例
- 圍欄安裝承攬合同范例
- 土地青苗轉(zhuǎn)讓合同范例
- 醫(yī)生聘用合同范例簡易
- 皖江工學(xué)院《史學(xué)前沿講座下》2023-2024學(xué)年第一學(xué)期期末試卷
- 租借婚紗合同范例
- 吊車售賣協(xié)議合同范例
- 借錢蓋房合同范例
- 《中國傳統(tǒng)民居建筑》課件
- 2024年九年級語文中考專題復(fù)習(xí)現(xiàn)代文閱讀(含答案)
- JJF 2163-2024漆膜劃格器校準(zhǔn)規(guī)范
- 浙江省寧波市慈溪市2023-2024學(xué)年高二上學(xué)期期末考試 數(shù)學(xué) 含解析
- 《中華人民共和國文物保護法》知識專題培訓(xùn)
- 2024年高考全國甲卷英語試卷(含答案)
- 血液透析服務(wù)協(xié)議
- 教師師德師風(fēng)的培訓(xùn)
- 肺炎支原體肺炎-4
- GB/T 44491.1-2024地理信息數(shù)字?jǐn)?shù)據(jù)和元數(shù)據(jù)保存第1部分:基礎(chǔ)
- 財務(wù)報表練習(xí)題及答案
評論
0/150
提交評論