日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

代码生成工具随笔(3)---占领最后一块黄金宝地

發(fā)布時(shí)間:2023/12/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代码生成工具随笔(3)---占领最后一块黄金宝地 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目前代碼生成工具多如繁星,絕大多數(shù)的代碼生成工具都是基于數(shù)據(jù)庫進(jìn)行實(shí)體類、數(shù)據(jù)訪問類、部分業(yè)務(wù)類等的代碼生成,較少會(huì)用來生成易用、重用的界面代碼,因?yàn)檫@塊的邏輯很難控制,每個(gè)人的需求都不一樣,而且把整個(gè)界面和業(yè)務(wù)層結(jié)合一起更是困難。如果界面代碼如果不進(jìn)行封裝,代碼會(huì)多的很難控制。因此很多即使做到界面代碼的生成,也只能做了部分關(guān)鍵界面代碼和后臺(tái)控件賦值的代碼,我的代碼生成工具也做過相關(guān)的工作,由于界面部分總體上不是很理想,一直來都是雞肋,棄之可惜。

?言歸正傳,“占領(lǐng)最后一塊黃金寶地”的意思就是在界面代碼生成這個(gè)領(lǐng)域有了很大的突破,將常用的查詢、分頁、修改、查看和增加等功能用3個(gè)控件(查詢控件、分頁控件、編輯控件)進(jìn)行了封裝,利用我的代碼生成工具Database2Sharp通過與數(shù)據(jù)庫字段的信息結(jié)合,完整的生成一個(gè)網(wǎng)站的界面工程框架,你需要做就是做一些錦上添花的工作就OK,工程越復(fù)雜效率提高就更快。

?先來看看不用編寫代碼而自動(dòng)生成的界面效果吧

主界面包含查詢模塊和信息列表分頁,同時(shí)有查詢、增加、刪除、查看、編輯等按鈕,其中刪除按鈕內(nèi)置了刪除提示,用戶通過實(shí)現(xiàn)委托函數(shù)即可完成;查詢、查看、編輯按鈕的實(shí)現(xiàn)是不需要操心。

新增頁面中可以設(shè)定必填項(xiàng),指定下拉列表等信息,如果必填項(xiàng)為空,那么如下如圖所示的提示信息,這些都是控件實(shí)現(xiàn)的功能,用戶通過實(shí)現(xiàn)保存委托函數(shù)即可實(shí)現(xiàn)數(shù)據(jù)的保存。


編輯信息如下圖所示,和增加頁面相似,但可以設(shè)定只讀項(xiàng)目,只讀項(xiàng)目不可以編輯。


查看頁面也是類似,頁面只有查看按鈕,且數(shù)據(jù)都不可以編輯。

以上4個(gè)場(chǎng)景的頁面是所有Web功能開發(fā)中最常見的功能,如果實(shí)現(xiàn)這些功能您不需要編碼或者只需要編些少代碼就可以實(shí)現(xiàn),那么您就可以從辛勞中解脫,獲得老板更高的贊賞和榮譽(yù)了。
快來吧,使用這三個(gè)控件(查詢、分頁、編輯),通過Database2Sharp輔助,一定可以使你做事事半功倍,節(jié)省些精力和時(shí)間,來陪陪你身邊最關(guān)心你的人吧。

Database2Sharp界面代碼生成功能演示:

1.? 為了配合代碼生成,您需要建立數(shù)據(jù)庫表及為每個(gè)字段添加合適的描述信息,描述文字將作為界面顯示的一部分內(nèi)容。
2.? 下載安裝Database2Sharp最新版本(http://www.iqidi.com/),或者在http://files.cnblogs.com/wuhuacong/Database2SharpSetup.rar?下載,然后使用如圖所示的Web界面代碼生成功能

按照提示一步一步進(jìn)行設(shè)置或者輸入,直到整個(gè)界面生成,最后可以自動(dòng)打開界面工程(生成的是VS2005的工程項(xiàng)目,當(dāng)然這些控件可以應(yīng)用到.NET 1.1中)。








查詢控件屬性說明:?
?NormalFields??????????? 查詢字段屬性集合
?RowControls??每行放置多少控件
?RememberValue??是否記錄控件的值作為下次顯示內(nèi)容
?NormalSortFieldName?排序字段名稱
?ConnectionString?數(shù)據(jù)庫鏈接字符串
?OutSQL???傳出的參數(shù)化SQL語句
?PagerParameters??和參數(shù)化SQL語句對(duì)應(yīng)的參數(shù)集合

?ShowAddNew ??是否顯示增加按鈕
?ShowDelete ??是否顯示刪除按鈕
?AppendedButtons??在查詢按鈕附近追加的按鈕

FieldInfo屬性說明:
?FieldName??數(shù)據(jù)庫字段名稱
?ViewName??字段的顯示名稱
?FieldType??字段類型
?DefaultValue??ListItem類型的默認(rèn)值(用于下拉列表)
?TargetFieldName??聯(lián)動(dòng)時(shí)候的字段名稱(用來定位聯(lián)動(dòng)的DropDownList)
?AddItem???用于添加聯(lián)動(dòng)列表內(nèi)容的委托函數(shù)

..........

控件使用說明:
?1.頁面代碼

?<cc1:huaweisearcher?id="HuaweiSearcher"?runat="server"?height="25"?width="100%"?InSQL="SELECT?*?FROM?Test"?RowControls="3"></cc1:huaweisearcher>

?2.后臺(tái)代碼?

????private?void?Page_Load(object?sender,?EventArgs?e)
????
{
????????
if?(!IsPostBack)
????????
{
????????????FieldInfo?nameInfo?
=?new?FieldInfo("Name",?"姓名",?FieldType.String);

????????????FieldInfo?cityInfo?
=?new?FieldInfo("City",?"城市",?FieldType.String);
????????????cityInfo.Width?
=?100;
????????????cityInfo.DefaultValue?
=?new?ListItem[]?{new?ListItem("北京市",?"北京"),?new?ListItem("廣州"),?new?ListItem("成都")};
????????????cityInfo.TargetFieldName?
=?"Area";
????????????cityInfo.AddItem?
=?new?AddItemHandler(this.AddItem);

????????????FieldInfo?areaInfo?
=?new?FieldInfo("Area",?"地區(qū)",?FieldType.String);
????????????areaInfo.DefaultValue?
=?new?ListItem[0];

????????????FieldInfo?manInfo?
=?new?FieldInfo("Man",?"是否男性",?FieldType.Boolean);
????????????FieldInfo?birthInfo?
=?new?FieldInfo("Birthday",?"出生日期",?FieldType.DateTime);
????????????FieldInfo?ageInfo?
=?new?FieldInfo("Age",?"年齡",?FieldType.Numeric);

????????????
this.HuaweiSearcher.NormalFields?=?new?FieldInfo[]?{nameInfo,?cityInfo,?areaInfo,?manInfo,?birthInfo,?ageInfo};
????????????
this.HuaweiSearcher.NormalSortFieldName?=?"ID";
????????????
this.HuaweiSearcher.ConnectionString?=?CONNECTION_STRING;
????????????
this.HuaweiSearcher.ColumnWidth?=?new?Unit[]{?Unit.Percentage(10),?Unit.Percentage(23),?Unit.Percentage(10),?
??????????????????????????????????????????????????????????Unit.Percentage(
23),?Unit.Percentage(10),?Unit.Percentage(23)?}
;?//設(shè)置列的寬度
????????????this.HuaweiSearcher.LabelHorizontalAlign?=?HorizontalAlign.Right;?//標(biāo)簽對(duì)齊方式

????????????BindData();
????????}

????}


????
private?void?BindData()
????
{
????????
this.Pager1.ConnectionString?=?this.HuaweiSearcher.ConnectionString;
????????
this.Pager1.PagerParameters?=?this.HuaweiSearcher.PagerParameters;
????????
this.Pager1.SQL?=?this.HuaweiSearcher.OutSQL;
????}


????
private?void?HuaweiSearcher_OutSQLValueChanged(object?sender,?HuaweiSearcher.OutSQLChangedEventArgs?e)
????
{
????????BindData();
????}


????
//下拉列表聯(lián)動(dòng)的函數(shù),如選定省份后,地區(qū)跟著變化
????private?void?AddItem(DropDownList?ddListControl,?string?selItemValue)
????
{
????????ddListControl.Items.Clear();

????????
if?(selItemValue.Trim().Length?>?0)
????????
{
????????????
string?sql?=?string.Format("select?Area?from?CityArea?where?City?='{0}'?",?selItemValue);
????????????
using?(SqlConnection?connection?=?new?SqlConnection(this.HuaweiSearcher.ConnectionString))
????????????
{
????????????????connection.Open();
????????????????SqlCommand?com?
=?new?SqlCommand(sql,?connection);
????????????????
using?(IDataReader?reader?=?com.ExecuteReader())
????????????????
{
????????????????????
while?(reader.Read())
????????????????????
{
????????????????????????ddListControl.Items.Add(
new?ListItem(reader["Area"].ToString()));
????????????????????}

????????????????}

????????????}

????????}


????????ddListControl.Items.Insert(
0,?new?ListItem("--所有--",?string.Empty));
????}

????
????
????
private?void?HuaweiSearcher_OnAddNew()
????
{
????????Response.Redirect(
"Modify.aspx?type=add");
????}


????
private?void?HuaweiSearcher_OnDelete()
????
{
????????
string?idstring?=?Helper.GetDatagridItems(dg);
????????
try
????????
{
????????????
if?(idstring?!=?string.Empty)
????????????
{
????????????????
string?filter?=?string.Format("ID?in?({0})",?idstring);
????????????????
//test.Delete(filter);
????????????????
????????????????Helper.Alerts(
this,?idstring);
????????????????
return;
????????????}

????????}

????????
catch?(Exception?ex)
????????
{
????????????Helper.ShowError(
this,?ex,?false);
????????????
return;
????????}

????????
????????Response.Redirect(
"Default.aspx");
????}



編輯控件屬性說明:
?EidtFields??新增或者編輯頁面的字段信息
?EntityObject??對(duì)應(yīng)的實(shí)體類對(duì)象
?ControlType??標(biāo)識(shí)是新增、編輯還是查看已有的數(shù)據(jù),默認(rèn)為新增
?RowControls??每行放置的控件組數(shù)目,默認(rèn)為2個(gè)

?ShowMessageBox??界面輸入轉(zhuǎn)換錯(cuò)誤的時(shí)候,是否顯示對(duì)話框,默認(rèn)為True
?ShowErrorAfter??界面輸入轉(zhuǎn)換錯(cuò)誤的時(shí)候,錯(cuò)誤信息是否放在控件的后面,默認(rèn)為false?

?OnCancel??處理取消并返回的委托
?OnSaveData??處理保存數(shù)據(jù)的委托

.........

FieldInfo屬性說明:
?FieldName??數(shù)據(jù)庫字段名稱
?ViewName??字段的顯示名稱
?FieldType??字段類型
?DefaultValue??ListItem類型的默認(rèn)值(用于下拉列表)
?TargetFieldName??聯(lián)動(dòng)時(shí)候的字段名稱(用來定位聯(lián)動(dòng)的DropDownList)
?AddItem???用于添加聯(lián)動(dòng)列表內(nèi)容的委托函數(shù)
?IsRequired ??字段是否必填項(xiàng),默認(rèn)為False (如果是必填項(xiàng),在界面上要求輸入內(nèi)容)
?ToolTip???控件的提示文本(只能設(shè)置文本框的提示)
?Enabled???控件是否可用,默認(rèn)為True
?MaxLength??文本框最大可以輸入的內(nèi)容長度
?TextBoxMode??文本款的呈現(xiàn)模式,可以是SingleLine、MulitLine、Passord類型
?TextRows??多行文本框顯示的行數(shù)
?TextColumns??文本框顯示的列字符數(shù)

控件使用說明:
?1.頁面代碼

?<cc1:editcontrol?id="EditControl1"?runat="server"?width="95%"?height="20px"></cc1:editcontrol>

?2.后臺(tái)代碼:

????private?const?string?CONNECTION_STRING?=?"Server=localhost;Database=Test;uid=sa;pwd=123456";

????
private?void?Page_Load(object?sender,?EventArgs?e)
????
{
????????
if(!this.IsPostBack)
????????
{
????????????BindData();
????????}

????????
????????
this.EditControl1.OnCancel?=?new?CancelHandler(this.OnCancel);
????????
this.EditControl1.OnSaveData?=?new?SaveDataHandler(this.OnSaveData);
????}

????
????
private?void?BindData()
????
{
????????ControlType?controlType?
=?GetControlType();
????????
this.EditControl1.ControlType?=?controlType;
????????
if(controlType?==?ControlType.Add)
????????
{
????????????EditControl1.EntityObject?
=?new?TestInfo();
????????}

????????
else
????????
{
????????????
int?id?=?int.Parse(Request.QueryString["ID"]);
????????????EditControl1.EntityObject?
=?FindByID(id);
????????}

????????
????????FieldInfo?nameInfo?
=?new?FieldInfo("Name",?"姓名",?FieldType.String);
????????nameInfo.IsRequired?
=?true;
????????nameInfo.ToolTip?
=?"請(qǐng)輸入用戶名稱";
????????
if(controlType?!=?ControlType.Add)
????????
{
????????????nameInfo.Enabled?
=?false;?//設(shè)置“名稱”不可編輯
????????}


????????FieldInfo?cityInfo?
=?new?FieldInfo("City",?"城市",?FieldType.String);
????????cityInfo.Width?
=?100;
????????cityInfo.DefaultValue?
=?new?ListItem[]?{new?ListItem("北京市",?"北京"),?new?ListItem("廣州"),?new?ListItem("成都"),?new?ListItem("武漢"),};
????????cityInfo.TargetFieldName?
=?"Area";
????????cityInfo.AddItem?
=?new?AddItemHandler(this.AddItem);

????????FieldInfo?areaInfo?
=?new?FieldInfo("Area",?"地區(qū)",?FieldType.String);
????????areaInfo.DefaultValue?
=?new?ListItem[0];

????????FieldInfo?manInfo?
=?new?FieldInfo("Man",?"是否男性",?FieldType.Boolean);
????????manInfo.DefaultValue?
=?new?ListItem[]?{new?ListItem("男性",?"True"),?new?ListItem("女性",?"False")};
????????FieldInfo?birthInfo?
=?new?FieldInfo("Birthday",?"出生日期",?FieldType.DateTime);
????????birthInfo.IsRequired?
=?true;

????????FieldInfo?ageInfo?
=?new?FieldInfo("Age",?"年齡",?FieldType.Numeric);

????????
this.EditControl1.EidtFields?=?new?FieldInfo[]?{nameInfo,?cityInfo,?areaInfo,?manInfo,?birthInfo,?ageInfo};

????????
this.EditControl1.RowControls?=?3;?//默認(rèn)一行放置2個(gè)控件組
????????this.EditControl1.ContentControlWidth?=?Unit.Pixel(180);//統(tǒng)一所有控件的長度
????????this.EditControl1.ColumnWidth?=?new?Unit[]{?Unit.Percentage(10),?Unit.Percentage(20),?Unit.Percentage(10),?
????????????????????????????????????????????????????Unit.Percentage(
20),?Unit.Percentage(10),?Unit.Percentage(20)?}
;?//設(shè)置列的寬度
????}

????
????
private?ControlType?GetControlType()
????
{
????????ControlType?controlType;
????????
string?type?=?Request.QueryString["type"];
????????
switch(type)
????????
{
????????????
case?"view"://查看頁面
????????????????controlType?=?ControlType.View;
????????????????
break;
????????????
case?"edit"://修改頁面
????????????????controlType?=?ControlType.Edit;
????????????????
break;????
????????????
default?://增加頁面
????????????????controlType?=?ControlType.Add;
????????????????
break;
????????}

????????
return?controlType;
????}


????
//您可以使用自己的業(yè)務(wù)類來獲取相關(guān)數(shù)據(jù)
????private?object?FindByID(int?id)
????
{
????????TestInfo?testInfo?
=?new?TestInfo();

????????
string?sql?=?string.Format("select?*?from?test?where?id?='{0}'?",?id);
????????
using?(SqlConnection?connection?=?new?SqlConnection(CONNECTION_STRING))
????????
{
????????????connection.Open();
????????????SqlCommand?com?
=?new?SqlCommand(sql,?connection);

????????????
using?(IDataReader?reader?=?com.ExecuteReader())
????????????
{
????????????????
if?(reader.Read())
????????????????
{
????????????????????testInfo.ID?
=?Convert.ToInt32(reader["ID"]);
????????????????????testInfo.Name?
=?reader["Name"].ToString();
????????????????????testInfo.Age?
=?Convert.ToInt32(reader["Age"]);
????????????????????testInfo.Area?
=?reader["Area"].ToString();
????????????????????testInfo.Birthday?
=?Convert.ToDateTime(reader["Birthday"]);
????????????????????testInfo.City?
=?reader["City"].ToString();
????????????????????testInfo.Man?
=?Convert.ToBoolean(reader["Man"]);
????????????????}

????????????}

????????}


????????
return?testInfo;
????}


????
private?void?AddItem(DropDownList?ddListControl,?string?selItemValue)
????
{
????????ddListControl.Items.Clear();

????????
if?(selItemValue.Trim().Length?>?0)
????????
{
????????????
string?sql?=?string.Format("select?Area?from?CityArea?where?City?='{0}'?",?selItemValue);
????????????
using?(SqlConnection?connection?=?new?SqlConnection(CONNECTION_STRING))
????????????
{
????????????????connection.Open();
????????????????SqlCommand?com?
=?new?SqlCommand(sql,?connection);
????????????????
using?(IDataReader?reader?=?com.ExecuteReader())
????????????????
{
????????????????????
while?(reader.Read())
????????????????????
{
????????????????????????ddListControl.Items.Add(
new?ListItem(reader["Area"].ToString()));
????????????????????}

????????????????}

????????????}

????????}

????}



????
private?void?OnCancel()
????
{
????????Response.Redirect(
"Default.aspx");
????}


????
/**////?<summary>
????
///?通過返回用戶提交數(shù)據(jù)的實(shí)體類信息,您可以實(shí)現(xiàn)自己的新增保存、修改保存操作
????
///?</summary>
????
///?<param?name="entity">新增或者修改的實(shí)體類信息</param>

????private?void?OnSaveData(object?entity)
????
{
????????
if?(this.EditControl1.ControlType?==?ControlType.Add)
????????
{
????????????
//在此保存新增頁面的數(shù)據(jù)
????????????Response.Write("新增的頁面數(shù)據(jù):<br>");
????????????Response.Write(ReflectionUtil.GetProperties(entity));
????????}

????????
else?if(this.EditControl1.ControlType?==?ControlType.Edit)
????????
{
????????????Response.Write(
"編輯的頁面數(shù)據(jù):<br>");
????????????Response.Write(ReflectionUtil.GetProperties(entity));
????????}

????}




相關(guān)文章:

??????代碼生成工具隨筆(1) ---關(guān)于代碼生成器
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

代碼生成工具隨筆(2) ---我的生成工具

轉(zhuǎn)載于:https://www.cnblogs.com/wuhuacong/archive/2007/12/09/988686.html

總結(jié)

以上是生活随笔為你收集整理的代码生成工具随笔(3)---占领最后一块黄金宝地的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。