v9.6.2017.0808   重构正向工程,基于映射表查找数据库字段类型到实体类型的映射
大石头 编写于 2017-08-08 21:38:06
X
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="<#=Table.Name#>.aspx.cs" Inherits="<#=Config.EntityConnName+"_"+Table.Name#>" Title="<#=Table.DisplayName#>管理" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <link href="../css/main.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="form1" runat="server">
    <ext:PageManager ID="PageManager1" runat="server" />
    <#
// 表单页面,普通行行高
Int32 LineHeight=27;
// 大文本行行高
Int32 LineHeight2=90;

// 表单窗口高度,初始值(Toolbar、表单头、提交按钮、运行时)
Int32 boxHeight = 31+29+29+14;

foreach(IDataColumn Field in Table.Columns){
    if(Field.PrimaryKey) continue;
    if(Field.DataType==typeof(String) && (Field.Length>300 || Field.Length<0))
        boxHeight += LineHeight2;
    else
        boxHeight += LineHeight;
}

StringBuilder sbpk=new StringBuilder();
StringBuilder sbpk2=new StringBuilder();
Int32 pki=0;
foreach(IDataColumn Field in Table.Columns){
    if(Field.PrimaryKey) {
        if(sbpk.Length>0)sbpk.Append(",");
        sbpk.Append(Field.Name);

        if(sbpk2.Length>0)sbpk2.Append("&");
        sbpk2.Append(Field.Name+"={"+pki+++"}");
    } 
}
    #>
    <ext:Panel ID="pnl" runat="server" BodyPadding="5px" EnableLargeHeader="false" EnableBackgroundColor="true"
        ShowBorder="true" ShowHeader="true" Title="<#=Table.DisplayName#>" Layout="Anchor">
        <Items>
            <ext:Grid ID="gv" runat="server" DataSourceID="ods" ShowBorder="true" ShowHeader="false"
                AutoHeight="true" AllowPaging="true" EnableRowNumber="True" EnableCheckBoxSelect="True"
                DataKeyNames="<#=sbpk#>" AllowSorting="true">
                <Toolbars>
                    <ext:Toolbar ID="gvbar" runat="server">
                        <Items>
                            <ext:Button ID="btnNew" Text="新增数据" Icon="Add" EnablePostBack="false" runat="server">
                            </ext:Button>
                            <ext:Button ID="btnDelete" Text="删除选中项" Icon="Delete" OnClick="btnDelete_Click" runat="server"
                                ConfirmText="删除将不可恢复,是否删除?" ConfirmTitle="确认删除">
                            </ext:Button>
                            <ext:ToolbarSeparator runat="server" />
                            <ext:Label runat="server" Text="关键字:" />
                            <ext:TextBox ID="txtKey" runat="server" Label="关键字" EmptyText="关键字">
                            </ext:TextBox>
                            <ext:Button ID="btnSearch" runat="server" Text="查询" />
                        </Items>
                    </ext:Toolbar>
                </Toolbars>
                <Columns>
<#
// 列表页不宜显示过多列
Int32 fieldMaxCount=10;
foreach(IDataColumn Field in Table.Columns){
    String pname = Field.Name;
    if(fieldMaxCount--<=0) break;

    // 查找关系,如果对方有名为Name的字符串字段,则加一个扩展属性
    IDataRelation dr=ModelHelper.GetRelation(Table, Field.ColumnName);
    if(dr!=null&&!dr.Unique){
        IDataTable rtable=FindTable(dr.RelationTable);
        if(rtable!=null){
            IDataColumn rname=rtable.GetColumn("Name");
            if(rname!=null&&rname.DataType==typeof(String)){#>
                    <ext:BoundField DataField="<#=rtable.Name+"Name"#>" HeaderText="<#=Field.DisplayName#>" SortField="<#=pname#>" /><#
                continue;
            }
        }
    }

    if(Field.Identity){#>
                    <ext:BoundField DataField="<#=pname#>" HeaderText="<#=Field.DisplayName#>" SortField="<#=pname#>" Width="40px" /><#}
    else if(Field.DataType == typeof(DateTime)){#>
                    <ext:BoundField DataField="<#=pname#>" HeaderText="<#=Field.DisplayName#>" SortField="<#=pname#>" DataFormatString="{0:yyyy-MM-dd HH:mm:ss}" Width="140px" /><#}
    else if(Field.DataType == typeof(Decimal)){#>
                    <ext:BoundField DataField="<#=pname#>" HeaderText="<#=Field.DisplayName#>" SortField="<#=pname#>" DataFormatString="{0:c}" /><#}
    else if(Type.GetTypeCode(Field.DataType)>=TypeCode.Int16&&Type.GetTypeCode(Field.DataType)<=TypeCode.UInt64){#>
                    <ext:BoundField DataField="<#=pname#>" HeaderText="<#=Field.DisplayName#>" SortField="<#=pname#>" DataFormatString="{0:n0}" /><#}
    else if(Field.DataType == typeof(Boolean)){#>
                    <ext:CheckBoxField DataField="<#=pname#>" HeaderText="<#=Field.DisplayName#>" SortField="<#=pname#>" RenderAsStaticField="true" /><#}
    // 密码字段和大文本字段不输出
    else if(!pname.Equals("Password", StringComparison.OrdinalIgnoreCase) && 
       !pname.Equals("Pass", StringComparison.OrdinalIgnoreCase) && 
       !pname.Equals("Pwd", StringComparison.OrdinalIgnoreCase) && 
       Field.Length>0 && Field.Length<300){#>
                    <ext:BoundField DataField="<#=pname#>" HeaderText="<#=Field.DisplayName#>" SortField="<#=pname#>" /><#
}}#>
                    <ext:WindowField WindowID="win" HeaderText="编辑" Icon="TableEdit" ToolTip="编辑" DataIFrameUrlFields="<#=sbpk#>" DataIFrameUrlFormatString="<#=Table.Name#>Form.aspx?<#=sbpk2#>" Width="40px" />
                    <ext:LinkButtonField CommandName="Delete" HeaderText="删除" Text="删除" ConfirmText="删除将不可恢复,是否删除?"
                        ConfirmTitle="确认删除" Width="40px" />
                </Columns>
            </ext:Grid>
        </Items>
    </ext:Panel>
    <ext:Window ID="win" Title="编辑 - <#=Table.DisplayName#>" Popup="false" EnableIFrame="true" runat="server"
        CloseAction="HidePostBack" EnableConfirmOnClose="true" IFrameUrl="about:blank"
        Target="Top" IsModal="True" Width="750px" Height="450px">
    </ext:Window>
    <asp:ObjectDataSource ID="ods" runat="server" EnablePaging="True" SelectCountMethod="SearchCount" SelectMethod="Search" SortParameterName="orderClause" EnableViewState="false">
        <SelectParameters>
            <asp:ControlParameter ControlID="pnl$gv$gvbar$txtKey" Name="key" PropertyName="Text" Type="String" />
            <asp:Parameter Name="orderClause" Type="String" />
            <asp:Parameter Name="startRowIndex" Type="Int32" />
            <asp:Parameter Name="maximumRows" Type="Int32" />
        </SelectParameters>
    </asp:ObjectDataSource>
    </form>
</body>
</html>