前言:此”快速生成后台“為本人參考discuz開源代碼效果組裝而成。無高深技術,只講究快速生成,適合建設中小型網站。運用得當可以批量生產網站后台。
以一個新聞系統為例子,寫出詳細建設過程,分享一下,以備后用。涉及工具有:VS2010、PowerDesigner、SQL Server 2008、DBBuildCode、ultraedit。
一、設計頁面
1、打開VS2010,新建一個空網站,保存至News文件夾。
2、添加新項:NewsList.aspx、NewsEdit.aspx2個Web窗體,新建文件夾:Style(main.css、general.css),新建文件夾:Images(界面所需圖片)。
3、設計NewsList.aspx(新聞列表)、NewsEdit.aspx(新聞編輯)頁面。
二、設計數據庫
1、打開PowerDesigner ,建表News。
2、打開SQL Server 2008,新建數據庫News,新建表:News(從PowerDesigner中取建表語句)。
三、自動生成數據庫代碼
1、新建App_Code,加個三個文件夾(DataBase、DBEntity、DBInterface),加入已有的三個文件(CDbBaseSqlServer.cs、CDbHelper、IDbBase.cs)至DataBase。
2、打開自動生成工具(本人自己用C++寫的)。
3、從PowerDesigner中取出News表的字段信息。
4、填入DBBuildCode工具,點擊“生成”按鈕,在工具目錄生成2個文件(CNewsInfo.cs、CNews.cs)。注:表結構中內容可以借助於ultraedit來處理。
5、把生成的2個文件(CNewsInfo.cs、CNews.cs)分別新添加至DBEntity、DBInterface文件夾,發現數據庫操作的代碼都已經生成。
6、設置Web.config中數據庫連接串等信息。
<?xml version="1.0"?> <!-- 有關如何配置 ASP.NET 應用程序的詳細信息,請訪問 http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <system.web> <compilation debug="true" targetFramework="4.0"/> </system.web> <appSettings> <add key="DatabasePre" value=""/> <add key="mssql" value="1"/> </appSettings> <connectionStrings> <add name="Conn" connectionString="server=local;database=news;User Id=sa;pwd=sa;"/> </connectionStrings> </configuration>
四、實現前台C#操作代碼。
在NewsList.aspx.cs、NewsEdit.aspx.cs實現對應的控件響應操作代碼。
關鍵代碼如下:
private void InitDataGrid() { DataTable dt = new DataTable(); if (this.txtSearch.Text != "") { dt = oNews.GetInfoForSearch(this.txtSearch.Text.Trim()); } else dt = oNews.GetInfo(); for (int i = 0; i < dt.Rows.Count; i++) { string sFlagRecomTemp = ""; //推薦標記 string sFlagRecom = dt.Rows[i]["FlagRecom"].ToString(); { if (sFlagRecom == "0") { sFlagRecomTemp = "否"; } if (sFlagRecom == "1") { sFlagRecomTemp = "是"; } } dt.Rows[i]["FlagRecom"] = sFlagRecomTemp; } int cup = Convert.ToInt32(this.lbCurrentPage.Text); PagedDataSource ps = new PagedDataSource(); ps.DataSource = dt.DefaultView; ps.AllowPaging = true; ps.PageSize = 24; ps.CurrentPageIndex = cup - 1; this.lbPage.Text = ps.PageCount.ToString(); this.ddlPage.Items.Clear(); for (int i = 1; i < ps.PageCount + 1; i++) { ListItem li = new ListItem(i.ToString(), i.ToString()); this.ddlPage.Items.Add(i.ToString()); } this.LinkUp.Enabled = true; this.LinkDown.Enabled = true; this.ddlPage.SelectedValue = cup.ToString(); if (Convert.ToInt16(this.lbCurrentPage.Text) < 2) { this.LinkFirst.Enabled = false; this.LinkUp.Enabled = false; } else { this.LinkFirst.Enabled = true; this.LinkUp.Enabled = true; } if (Convert.ToInt16(this.lbCurrentPage.Text) >= Convert.ToInt16(this.lbPage.Text)) { this.LinkDown.Enabled = false; this.LinkLast.Enabled = false; } else { this.LinkDown.Enabled = true; this.LinkLast.Enabled = true; } this.dgList.DataSource = ps; this.dgList.DataBind(); if (dt.Rows.Count < 1) { this.currentPage.Style.Add("display", "none"); this.currentPageError.Style.Add("display", ""); } else { this.currentPage.Style.Add("display", ""); this.currentPageError.Style.Add("display", "none"); } }
private void InitNewsEdit() { int iId = 0; string sEdit = ""; if (Request.Params["edit"] != null) { sEdit = Request.Params["edit"].ToString().ToLower(); ViewState["flagedit"] = sEdit; } if (Request.Params["id"] != null) { iId = Convert.ToInt32(Request.Params["id"].ToString()); ViewState["id"] = iId; } switch (sEdit) { case "add": { this.lbTitle.Text = "添加新聞"; sFlagMsg = "fail"; } break; case "edit": { this.lbTitle.Text = "修改新聞"; sFlagMsg = "ok"; CNewsInfo oNewsInfo = new CNewsInfo(); oNewsInfo = oNews.GetInfo(iId); int iSid = 0; iSid = oNewsInfo.Nid; this.txtTitle.Text = oNewsInfo.Title; this.txtCreator.Text = oNewsInfo.Creator; this.ddlFlagRecom.SelectedValue = oNewsInfo.FlagRecom; this.txtContent.Text = oNewsInfo.Content; } break; default: break; } } protected void btnSubmit_Click(object sender, EventArgs e) { int iId = 0; iId = CTypeConverter.StrToInt(ViewState["id"].ToString()); string sTitle = ""; string sCreator = ""; string sContent = ""; int iHits = 0; string sFlagRecom = ""; sTitle = this.txtTitle.Text.Trim(); sCreator = this.txtCreator.Text.Trim(); sContent = this.txtContent.Text.Trim(); sFlagRecom = this.ddlFlagRecom.SelectedValue; string sFlagEdit = ViewState["flagedit"].ToString(); switch (sFlagEdit) { case "add": { CNewsInfo oNewsInfo = new CNewsInfo(); oNewsInfo.Title = sTitle; oNewsInfo.Creator = sCreator; oNewsInfo.Content = sContent; oNewsInfo.Hits = iHits; oNewsInfo.FlagRecom = sFlagRecom; oNews.Insert(oNewsInfo); Response.Redirect("SystemInfo.aspx?msgname=" + Server.UrlEncode("新聞添加成功!") + "&backpage=NewsEdit.aspx?edit=add&backname=" + Server.UrlEncode("繼續添加新聞")); } break; case "edit": { CNewsInfo oNewsInfo = new CNewsInfo(); oNewsInfo = oNews.GetInfo(iId); oNewsInfo.Title = sTitle; oNewsInfo.Creator = sCreator; oNewsInfo.Content = sContent; oNewsInfo.FlagRecom = sFlagRecom; oNews.Update(iId, oNewsInfo); Response.Redirect("SystemInfo.aspx?msgname=" + Server.UrlEncode("新聞修改成功!") + "&backpage=NewsList.aspx&backname=" + Server.UrlEncode("返回新聞列表")); } break; default: break; } }
五、運行NewsList.aspx效果圖。
有顯示、查詢、添加、修改、刪除、分頁功能。
PS:原型是這樣,可以根據各種網站的風格去定制效果。源碼。