傻瓜框架——零代码快速生产Mis系统

  很久没有在自己的电脑上敲代码了,最近有个哥们问帮他改个CRM,拿到旧系统看了一下,标准的客户端程序,界面很简单左树右上卡片右下列表风格,点左面节点,右边展示,双击列表明细弹出CRUD画面。千篇一律,只有登录界面除外,原系统是C++做的又没源码,那唯一有用的就是这个Acess了。

  N久没过过类似的项目了,到处在Google,baidu上 找WEB的Crud控件,试来试去都不合适,就打算着手写一个,着手用GridView控件改造,MSDN时发现了DetailsView控件,两者组合居然很Easy就解决CRUD问题了。

  

     发现:两个控件组合后的代码很简单,一句代码就绑定了数据源,控件crud、翻页,排序的代码也很有规律:主键和CRUD的Command和Parameters。 这个发现很兴奋,这些信息过表的Assemble信息很容易查出。以前写过WEB页面通过OR映射生成项目实体类小工具,这个要简单很多。首先通过系统存储过程 “sp_helpdb”得出:

 

 

在通过代码

 

 列出:

 

  思考:1.需要一个能过完整CRUD(包括较复杂的带外键级联删除,级联更新)测试和布局加工后的标准页面做成.aspx和.cs模板,根据数据库表信息,自动生成所有表页面!

代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="※TableName※.aspx.cs" Inherits="※ClassName※" %>※NewLine※※NewLine※

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">※NewLine※※NewLine※

<html xmlns="http://www.w3.org/1999/xhtml">※NewLine※
<head runat="server">※NewLine※
    
<title></title>※NewLine※
    
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />※NewLine※
    
<link type="text/css" rel="Stylesheet" href="http://www.cnblogs.com/Style/Main.css" /> ※NewLine※
</head>※NewLine※
<body>※NewLine※
    
<form id="form1" runat="server">※NewLine※
    
<div> ※NewLine※
    
<table>※NewLine※
    
<tr> <td align="center" > <h3><span>※LTableName※</span></h3><br /> </td></tr>※NewLine※
    
<tr><td>  <asp:GridView ID="GridView1" runat="server" AllowPaging="True" ※NewLine※
            AllowSorting
="True" BackColor="White" BorderColor="#336666" ※NewLine※
            BorderStyle
="Double" BorderWidth="3px" CellPadding="4" DataKeyNames="※PrimaryKey※" OnRowUpdating="GridView1_RowAdding"※NewLine※
            DataSourceID
="SqlDataSource1" GridLines="Horizontal" ※NewLine※
            AutoGenerateColumns
="False">※NewLine※
            
<RowStyle BackColor="White" ForeColor="#333333" />※NewLine※
            
<Columns>※NewLine※
                
<asp:CommandField ShowSelectButton="True" />※NewLine※
                
<asp:BoundField DataField="※PrimaryKey※" HeaderText="※PrimaryKey※" ReadOnly="True"  Visible="false"※NewLine※
                    SortExpression
="※PrimaryKey※" />※NewLine※
                ※BoundFields※※NewLine※
            
</Columns>※NewLine※
            
<FooterStyle BackColor="White" ForeColor="#333333" />※NewLine※
            
<PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" />※NewLine※
            
<SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />※NewLine※
            
<HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" />※NewLine※
        
</asp:GridView></td></tr>※NewLine※
    
<tr><td style="width:100%" align="center">※NewLine※
                
<asp:DetailsView ID="DetailsView1" runat="server" AllowPaging="True" ※NewLine※
                    AutoGenerateRows
="False" DataKeyNames="※PrimaryKey※" DataSourceID="SqlDataSource" ※NewLine※
                    Height
="50px" Width="100%" BackColor="White" BorderColor="#336666" ※NewLine※
                    BorderStyle
="Double" BorderWidth="3px" CellPadding="4" ※NewLine※
                    GridLines
="Horizontal" onitemupdated="DetailsView1_ItemUpdated" ※NewLine※
                    onitemdeleted
="DetailsView1_ItemDeleted" ※NewLine※
                    oniteminserted
="DetailsView1_ItemInserted">※NewLine※
                    
<FooterStyle BackColor="White" ForeColor="#333333" />※NewLine※
                    
<RowStyle BackColor="White" ForeColor="#333333" />※NewLine※
                    
<PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" />※NewLine※
                    
<Fields>※NewLine※
                        
<asp:BoundField DataField="※PrimaryKey※" HeaderText="※PrimaryKey※" ReadOnly="True" ※NewLine※
                            SortExpression
="※PrimaryKey※" />※NewLine※
                        ※BoundFields※※NewLine※
                        
<asp:TemplateField ShowHeader="False">※NewLine※
                            
<EditItemTemplate>※NewLine※
                                
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" ※NewLine※
                                    CommandName
="Update" Text="更新"></asp:LinkButton>※NewLine※
                                
&nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" ※NewLine※
                                    CommandName
="Cancel" Text="取消"></asp:LinkButton>※NewLine※
                            
</EditItemTemplate>※NewLine※
                            
<InsertItemTemplate>※NewLine※
                                
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" ※NewLine※
                                    CommandName
="Insert" Text="插入"></asp:LinkButton>※NewLine※
                                
&nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" ※NewLine※
                                    CommandName
="Cancel" Text="取消"></asp:LinkButton>※NewLine※
                            
</InsertItemTemplate>※NewLine※
                            
<ItemTemplate>※NewLine※
                                
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" ※NewLine※
                                    CommandName
="Edit" Text="编辑"></asp:LinkButton>※NewLine※
                                
&nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" ※NewLine※
                                    CommandName
="New" Text="新建"></asp:LinkButton>※NewLine※
                                
&nbsp;<asp:LinkButton ID="LinkButton3" runat="server" CausesValidation="False"  OnClientClick=" javascript:return confirm('你确认要删除吗?')" ※NewLine※
                                    CommandName
="Delete" Text="删除"></asp:LinkButton>※NewLine※
                            
</ItemTemplate>※NewLine※
                        
</asp:TemplateField>※NewLine※
                    
</Fields>※NewLine※
                    
<HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" />※NewLine※
                    
<EditRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />※NewLine※
                
</asp:DetailsView></td></tr>        ※NewLine※
    
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ※NewLine※
            ConnectionString
="<%$ ConnectionStrings:※ConnectionStrings※ %>" ※NewLine※
            SelectCommand
="※SelectCommand※">※NewLine※
        
</asp:SqlDataSource>※NewLine※
    
<asp:SqlDataSource ID="SqlDataSource" runat="server" ※NewLine※
            ConflictDetection
="CompareAllValues" ※NewLine※
            ConnectionString
="<%$ ConnectionStrings:※ConnectionStrings※ %>" ※NewLine※
            DeleteCommand
="DELETE FROM [※TableName※] WHERE [※PrimaryKey※] = @original_ID " ※NewLine※
            InsertCommand
="INSERT INTO [※TableName※] ※InsertCommand※" ※NewLine※
            OldValuesParameterFormatString
="original_{0}" ※NewLine※
            SelectCommand
="※SelectCommand※  WHERE [※PrimaryKey※] = @original_ID " ※NewLine※
            ※NewLine※
            UpdateCommand
="UPDATE [※TableName※] SET ※UpdateCommand※ WHERE [※PrimaryKey※] = @original_ID ">※NewLine※
            
<SelectParameters>※NewLine※
                
<asp:ControlParameter ControlID="GridView1" Name="original_ID" ※NewLine※
                    PropertyName
="SelectedValue" />※NewLine※
            
</SelectParameters>※NewLine※
            
<DeleteParameters>※NewLine※
                
<asp:Parameter Name="original_ID" Type="※PrimaryKey_Type※" />※NewLine※
            
</DeleteParameters>※NewLine※
            
<UpdateParameters>※NewLine※
              ※CommandParameters※※NewLine※
                
<asp:Parameter Name="original_ID" Type="※PrimaryKey_Type※" />※NewLine※
            
</UpdateParameters>※NewLine※
            
<InsertParameters>※NewLine※
                
<asp:Parameter Name="※PrimaryKey※" Type="※PrimaryKey_Type※" />※NewLine※
                ※CommandParameters※※NewLine※
            
</InsertParameters>※NewLine※
        
</asp:SqlDataSource>※NewLine※
   
</table>※NewLine※
    
</div>※NewLine※
    
</form>※NewLine※
</body>※NewLine※
</html>※NewLine※

 

   

2.需要额外加一个字典表,因为这种表名生成类名生成的页面标题和节点名称,用户根本看不明白,需要做映射。

3.根据用户表把数据权限也生成了。甚至可以精确到某个字段加上C、R、U、D组合都生成唯一的主键,再把用户ID放进来,就可以实现超灵活的权限管理了。

4.现根据表名把树菜单节点加上。

代码
<asp:TreeNode Text='自动生产节点' Expanded='false' Value='自动生产节点'>
<asp:TreeNode NavigateUrl='~/View/Base/CGD_DDH_BZ.aspx' Text='CGD_DDH_BZ' Target='HanZiMainPage' Value='CGD_DDH_BZ'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/CKGL_FL.aspx' Text='CKGL_FL' Target='HanZiMainPage' Value='CKGL_FL'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/CKGL_FZ.aspx' Text='CKGL_FZ' Target='HanZiMainPage' Value='CKGL_FZ'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/CKGL_FZ_BZ.aspx' Text='CKGL_FZ_BZ' Target='HanZiMainPage' Value='CKGL_FZ_BZ'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/CKGL_WP.aspx' Text='CKGL_WP' Target='HanZiMainPage' Value='CKGL_WP'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/CMLB.aspx' Text='CMLB' Target='HanZiMainPage' Value='CMLB'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/DDefault.aspx' Text='DDefault' Target='HanZiMainPage' Value='DDefault'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/DDGL.aspx' Text='DDGL' Target='HanZiMainPage' Value='DDGL'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/DDXX.aspx' Text='DDXX' Target='HanZiMainPage' Value='DDXX'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/DDXX_BZ.aspx' Text='DDXX_BZ' Target='HanZiMainPage' Value='DDXX_BZ'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/FKD.aspx' Text='FKD' Target='HanZiMainPage' Value='FKD'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/FLDW.aspx' Text='FLDW' Target='HanZiMainPage' Value='FLDW'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/GYS.aspx' Text='GYS' Target='HanZiMainPage' Value='GYS'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/JGCJ.aspx' Text='JGCJ' Target='HanZiMainPage' Value='JGCJ'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/KHXX.aspx' Text='KHXX' Target='HanZiMainPage' Value='KHXX'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/KSFL.aspx' Text='KSFL' Target='HanZiMainPage' Value='KSFL'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/LAST_JG.aspx' Text='LAST_JG' Target='HanZiMainPage' Value='LAST_JG'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/Pass.aspx' Text='Pass' Target='HanZiMainPage' Value='Pass'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/SCGL.aspx' Text='SCGL' Target='HanZiMainPage' Value='SCGL'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/SCGL_MX.aspx' Text='SCGL_MX' Target='HanZiMainPage' Value='SCGL_MX'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/SKD.aspx' Text='SKD' Target='HanZiMainPage' Value='SKD'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/SPGG.aspx' Text='SPGG' Target='HanZiMainPage' Value='SPGG'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/SPLB.aspx' Text='SPLB' Target='HanZiMainPage' Value='SPLB'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/StyleInfo.aspx' Text='StyleInfo' Target='HanZiMainPage' Value='StyleInfo'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/THD.aspx' Text='THD' Target='HanZiMainPage' Value='THD'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/THD_BZ.aspx' Text='THD_BZ' Target='HanZiMainPage' Value='THD_BZ'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/THXX.aspx' Text='THXX' Target='HanZiMainPage' Value='THXX'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/XSD.aspx' Text='XSD' Target='HanZiMainPage' Value='XSD'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/XSXX.aspx' Text='XSXX' Target='HanZiMainPage' Value='XSXX'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/XSXX_BZ.aspx' Text='XSXX_BZ' Target='HanZiMainPage' Value='XSXX_BZ'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/YGZL.aspx' Text='YGZL' Target='HanZiMainPage' Value='YGZL'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/YSLB.aspx' Text='YSLB' Target='HanZiMainPage' Value='YSLB'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/ZYZGL.aspx' Text='ZYZGL' Target='HanZiMainPage' Value='ZYZGL'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/UserRight.aspx' Text='UserRight' Target='HanZiMainPage' Value='UserRight'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/UserLogin.aspx' Text='UserLogin' Target='HanZiMainPage' Value='UserLogin'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/UserInfo.aspx' Text='UserInfo' Target='HanZiMainPage' Value='UserInfo'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/GongGao.aspx' Text='GongGao' Target='HanZiMainPage' Value='GongGao'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/CGD.aspx' Text='CGD' Target='HanZiMainPage' Value='CGD'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/CGD_BZ.aspx' Text='CGD_BZ' Target='HanZiMainPage' Value='CGD_BZ'></asp:TreeNode>
<asp:TreeNode NavigateUrl='~/View/Base/CGD_DDH.aspx' Text='CGD_DDH' Target='HanZiMainPage' Value='CGD_DDH'></asp:TreeNode>
</asp:TreeNode>

 

 

 如图。

  

6.框架页. 代码

 

 

 

 

扩展延伸:

     这样利用.net的标准控件,很简单把PD,ERWin,Rose任何一个建模工具绘出来图直接生成所见所得的简单的框架,优点是对微型小项目,效率高,对有复杂的业务逻辑要求较高的不适用。

     很久没写技术博客了,这个看真不习惯了。这个小项目还没做完,把 我思路拿出来晒晒,上面SQL代码和Html代码可能有敏感字符,展不开,晕死,有任何意见或对代码感兴趣的可以留下邮件地址,共同学习:)

 

 

 

 

 

 

 

posted @ 2010-12-19 19:46  种地的汉子  Views(2655)  Comments(25)    收藏  举报