代碼生成工具之界面快速生成


界面開發,無論對於Web開發,還是Winform開發,都需要耗費一定的時間,特別對於一個數據庫字段比較多的界面,一般就需要在編輯界面上擺的更多的控件來做數據顯示,每次碰到這個,都有點頭痛,反復的機械操作讓人挺累,也很煩,但是又必須這樣做。

由於數據庫字段和界面的排版都有一定的關聯關系,因此可以通過代碼生成工具Database2Sharp的數據庫元數據,包含表名稱、備注信息、字段列表,以及每個字段的名稱、備注、類型等信息,構造一個基礎的界面,把重復機械的部分給快速完成,這就是我所說的界面快速生成。當然,對於精致的界面,機械的生成肯定不能滿足我們的需要,因此真正的界面需要在這個基礎上修改完善一下,但是由於重復勞動部分,已經給工具處理掉了,因此,界面開發效率會大大提高。

1、基於Web界面的快速生成

基於EnterpriseLibray架構的代碼生成,除了可以生成傳統的業務層、數據訪問層、數據訪問接口層、實體層外,還同時生成了Web界面工程,Web界面工程已經添加了相關的引用程序集及必須的控件,生成后即可編譯運行,一些表字段設計合理的話,甚至不用修改一行代碼就能直接使用,如下所示。

生成后的項目界面截圖如下所示。

以下是TB_ItemDetail表生成的界面,沒有修改過任何東西,列表頁面呈現的效果。

其中編輯及查看頁面也生成了,直接單擊連接就可以看到效果,如下圖所示。

 

這些效果是很基本的界面布局了,如果需要更好看的,可以根據需要調整下每行的數量,以及顯示方式。這樣的效果,雖然不算最好看,但是已經幫我們把界面元素弄起來了,我們后面的工作就很好開展,不用再重復添加每個字段對應的控件布局信息了。具體的代碼是標准的HTML控件代碼如下所示。

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" Inherits="Pages_ItemDetail_EditItemDetail"  Codebehind="EditItemDetail.aspx.cs" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <h3 id="h_title" align="center" runat="server">編輯備件信息表 </h3>
    <table class="formitem" cellspacing="1" cellpadding="0" align="Center" border="0"
        style="border-width: 0px; width: 98%;">
        <caption>基本信息</caption>  
        <tr style="width: 100%;">
            <th align="left" style="width: 20%;">
                 備件編號 :
            </th>
            <td style="width: 80%;" colspan="3">
                &nbsp;<asp:TextBox ID="txtItemNo" runat="server" Width="250px" MaxLength="100"></asp:TextBox>
            </td>
        </tr>
        <tr style="width: 100%;">
            <th align="left" style="width: 20%;">
                 備件名稱 :
            </th>
            <td style="width: 80%;" colspan="3">
                &nbsp;<asp:TextBox ID="txtItemName" runat="server" Width="250px" MaxLength="100"></asp:TextBox>
            </td>
        </tr>
        <tr style="width: 100%;">
            <th align="left" style="width: 20%;">
                 供貨商 :
            </th>
            <td style="width: 80%;" colspan="3">
                &nbsp;<asp:TextBox ID="txtManufacture" runat="server" Width="250px" MaxLength="100"></asp:TextBox>
            </td>
        </tr>
...............

當然后台代碼的保存及賦值顯示,肯定是少不了的了,這些也是根據我的框架代碼生成的,應該來說是很有用的。

public partial class Pages_ItemDetail_EditItemDetail : BasePage
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        this.IsFunctionControl = true;
        this.FunctionID = "ItemDetail/Edit";
    }
    
    private void BindData()
    {
        try
        {
            string id = Request.QueryString["ID"];
            if(!string.IsNullOrEmpty(id))
            {
                ItemDetailInfo info = BLLFactory<ItemDetail>.Instance.FindByID(id);
                if(info != null)
                {
                     this.txtItemNo.Text = info.ItemNo;
                     this.txtItemName.Text = info.ItemName;
                     this.txtManufacture.Text = info.Manufacture;
                     this.txtMapNo.Text = info.MapNo;
                     this.txtSpecification.Text = info.Specification;
                     this.txtMaterial.Text = info.Material;
                     this.txtItemBigType.Text = info.ItemBigType;
                     this.txtItemType.Text = info.ItemType;
                     this.txtUnit.Text = info.Unit;
                     this.txtPrice.Text = info.Price.ToString();
                     this.txtSource.Text = info.Source;
                     this.txtStoragePos.Text = info.StoragePos;
                     this.txtUsagePos.Text = info.UsagePos;
                     this.txtNote.Text = info.Note;
                     this.txtWareHouse.Text = info.WareHouse;
                     this.txtDept.Text = info.Dept;
                 }
            }
        }
        catch(Exception ex)
        {
            Helper.ShowError(this, ex, false);
            return;
        }
      }

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

    /// <summary>
    /// 獲取數據
    /// </summary> 
    private ItemDetailInfo SetData(ItemDetailInfo info)
    { 
         info.ItemNo = this.txtItemNo.Text;   
         info.ItemName = this.txtItemName.Text;   
         info.Manufacture = this.txtManufacture.Text;   
         info.MapNo = this.txtMapNo.Text;   
         info.Specification = this.txtSpecification.Text;   
         info.Material = this.txtMaterial.Text;   
         info.ItemBigType = this.txtItemBigType.Text;   
         info.ItemType = this.txtItemType.Text;   
         info.Unit = this.txtUnit.Text;   
         info.Price = Helper.SafeConvertDecimal(this.txtPrice.Text);
         info.Source = this.txtSource.Text;   
         info.StoragePos = this.txtStoragePos.Text;   
         info.UsagePos = this.txtUsagePos.Text;   
         info.Note = this.txtNote.Text;   
         info.WareHouse = this.txtWareHouse.Text;   
         info.Dept = this.txtDept.Text;   
         return info;
    }
     
    protected void imgSubmit_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            string id = Request.QueryString["ID"];
            if(string.IsNullOrEmpty(id))
            {
                ItemDetailInfo info = new ItemDetailInfo();
                SetData(info);
                
                BLLFactory<ItemDetail>.Instance.Insert(info);
            }
            else
            {
                ItemDetailInfo info = BLLFactory<ItemDetail>.Instance.FindByID(id);
                if(info != null)
                {
                    SetData(info);
                    BLLFactory<ItemDetail>.Instance.Update(info, id);
                }
            }
        }
        catch(Exception ex)
        {
            Helper.ShowError(this, ex, false);
            return;
        }
        
        Response.Redirect("ListItemDetail.aspx");
    }

    protected void imgBack_Click(object sender, ImageClickEventArgs e)
    {
        Response.Redirect("ListItemDetail.aspx");
    }
}

有了這些智能的界面生成,界面開發其實是一件不再枯燥的事情,節省更多的時間,做更有意義的事情。

2、基於DevExpress的Winform界面快速生成

除了Web的界面開發,Winform的界面開發,當然也很重要,枯燥的事情一樣可以交給代碼生成工具Database2Sharp進行生成,不需要讓人工反復的做這些無用功,或者是技術含量不太高的東西。

上面Web界面工程,我是采用SQLServer的數據庫進行生成代碼的,這個例子,我們介紹一下Oracle數據庫的生成方式,其實這個代碼生成工具,對應用什么數據庫不重要,都會很好的給你生成相關的界面信息,不管你是用SQLServer還是Oracle,或者是Sqlite、Access、MySql等等,都一樣可以很好的生成所需的開發代碼的。

工具生成了界面布局代碼,以及界面后台邏輯代碼,這樣的代碼正是我們開發所需要的,我們看到生成后的界面代碼(沒有修改代碼的),在VS里面的真實效果如下。

上面的布局采用了LayoutControl來進行布局控制,這是一種很好的布局控制方法,它除了使得界面更加美觀外,還能非常自由調整每個控件的位置及大小。

當然,我們一般為了美觀需要,會對界面進行一定的調整,由於DevExpress控件類型變化切換很方便,所以這種調整很自由高效,調整后的界面如下所示。

比起十幾秒鍾弄好一個界面,純手工做這樣的界面,沒有十幾分鍾,估計弄不好的,而且容易出錯,最重要的問題,就是團隊開發的時候,這個統一性就很有保證,開發效率高,帶來Bug也會很少。

3、基於傳統的Winform界面快速生成

 傳統的Winform界面和DotNetBar樣式的界面生成,和上面的DevExpress樣式代碼很類似,不過控件不同而已,由於不同的需要,用傳統界面元素開發,也是一種常見的開發模式,因此我的代碼生成工具也支持這種常規的界面生成,來輔助大家做好界面的工作。

除了設置以上界面樣式外,其他生成操作一樣。得到的界面效果如下所示。

和DevExpress控件界面代碼類似,這里也使用了TableLayout的布局控件,用來較好控制布局的高度寬度,以及每行位置等,這樣整體效果就很好,也容易進行界面元素的控制。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM