codeSmith实现ExtJS中Grid代码生成
来源:互联网 发布:小米云服务擦除数据 编辑:程序博客网 时间:2024/05/20 02:23
新的项目中。要使用ExtJs,为了简单,写了这么一个简单的CodeSmith模板来根据数据库中的表生成Grid。
代码如下:
<%--
Name:<%= GetClassName(SourceTable) %>
Author: sunfishlu
Description:
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="JScript" Description="Generates a very simple business object." ResponseEncoding="UTF-8" %>
<%@ Property Name="NameSpace" Type="String" Category="Text" Default="Sunfishlu." Description="The namespace to use for this class" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.Data" %>
/**
* @author sunfish
*/
var storeMain = new Ext.data.Store({
proxy:new Ext.data.HttpProxy({
url:'<%= GetUrlName(SourceTable) %>'
}),
reader:new Ext.data.JsonReader({
root:'data',
id:'<%= SourceTable.PrimaryKey.MemberColumns[0].Name %>',
totalProperty:'totalCount',
fields:
[
<% for (int i=0; i < SourceTable.Columns.Count; ++i) { %> <%=GetMemberVariableName(SourceTable.Columns[i])%><% if (i < SourceTable.Columns.Count - 1) { %>,<% }%><%}%>
]
}),
remoteSort:true
});
Ext.onReady(function(){
Ext.BLANK_IMAGE_URL = 'http://images.cnblogs.com/s.gif';
Ext.QuickTips.init();
var grid = new Ext.grid.GridPanel({
store:storeMain,
columns:
[
new Ext.grid.RowNumberer(),
<% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>
{header:"<%=GetHeaderName(SourceTable.Columns[i])%>",align:'center',sortable: true,dataIndex:<%=GetMemberVariableName(SourceTable.Columns[i])%>}<% if (i < SourceTable.Columns.Count - 1) { %>,<% } %>
<% } %>
],
renderTo:'grid',
viewConfig:{forceFit:true},
trackMouseOver:true,
loadMask: true,
autoShow : true,
autoScroll: true,
loadMask:{msg:"数据加载中,请稍等"},
bbar:new Ext.PagingToolbar({
pageSize:20,
store:storeMain,
displayInfo:true,
displayMsg:'当前显示 {0} - {1}条记录 /共 {2}条记录',
emptyMsg:"没有数据"
})
});
storeMain.load({params:{start:0, limit:20,sort:'<%= SourceTable.PrimaryKey.MemberColumns[0].Name %>',dir:'desc'}});
});
<script runat="template">
// My functions here.
public string GetClassName(TableSchema table)
{
if(table==null)
{
return null;
}
return table.Name + "Grid";
}
public string GetUrlName(TableSchema table)
{
if(table==null)
{
return null;
}
return table.Name + "Grid"+".aspx";
}
#region script
public string GetMemberVariableDeclarationStatement(ColumnSchema column)
{
return GetMemberVariableDeclarationStatement("private", column);
}
public string GetMemberVariableDeclarationStatement(string protectionLevel, ColumnSchema column)
{
string statement = protectionLevel + " ";
statement += GetCSharpVariableType(column) + " " + GetMemberVariableName(column);
string defaultValue = GetMemberVariableDefaultValue(column);
if (defaultValue != "")
{
statement += " = " + defaultValue;
}
statement += ";";
return statement;
}
public string GetConstructorParameters()
{
string ret = "";
foreach(ColumnSchema column in SourceTable.Columns)
{
ret += GetCSharpVariableType(column) + " " + GetCamelCaseName(GetPropertyName(column)) + ",/n/t/t/t";
}
return ret.Substring(0, ret.Length - 5);
}
public string GetAssignValue()
{
string ret = "";
foreach(ColumnSchema column in SourceTable.Columns)
{
ret += GetMemberVariableName(column) + (new String(' ', GetPropertyNameMaxLength() - GetPropertyNameLength(column))) + " = " + GetCamelCaseName(GetPropertyName(column)) + ";/n/t/t/t";
}
return ret;
}
public string GetReaderAssignmentStatement(ColumnSchema column, int index)
{
string statement = "if (!reader.IsDBNull(" + index.ToString() + ")) ";
statement += GetMemberVariableName(column) + " = ";
if (column.Name.EndsWith("TypeCode")) statement += "(" + column.Name + ")";
statement += "reader." + GetReaderMethod(column) + "(" + index.ToString() + ");";
return statement;
}
public string GetCamelCaseName(string value)
{
//return value.Substring(0, 1).ToLower() + value.Substring(1);
return value;
}
public string GetMemberVariableName(ColumnSchema column)
{
//string propertyName = GetPropertyName(column);
string propertyName = column.Name;
string memberVariableName = "'" +GetCamelCaseName(propertyName)+"'";
return memberVariableName;
}
public string GetHeaderName(ColumnSchema column)
{
//string propertyName = GetPropertyName(column);
string propertyName = column.Name;
string memberVariableName = GetCamelCaseName(propertyName);
return memberVariableName;
}
public string GetPropertyName(ColumnSchema column)
{
string propertyName = column.Name;
if (propertyName == column.Table.Name + "Name") return "Name";
if (propertyName == column.Table.Name + "Description") return "Description";
if (propertyName.EndsWith("TypeCode")) propertyName = propertyName.Substring(0, propertyName.Length - 4);
return propertyName;
}
public int GetPropertyNameLength(ColumnSchema column)
{
return (GetPropertyName(column)).Length;
}
public int GetPropertyNameMaxLength()
{
int ret = 0;
foreach(ColumnSchema column in SourceTable.Columns)
{
ret = ret < GetPropertyNameLength(column)?GetPropertyNameLength(column):ret;
}
return ret;
}
public string GetMemberVariableDefaultValue(ColumnSchema column)
{
if(column.IsPrimaryKeyMember)
{
return "";
}
switch (column.DataType)
{
case DbType.Guid:
{
return "Guid.Empty";
}
case DbType.AnsiString:
case DbType.AnsiStringFixedLength:
case DbType.String:
case DbType.StringFixedLength:
{
return "String.Empty";
}
default:
{
return "";
}
}
}
public string GetCSharpVariableType(ColumnSchema column)
{
if (column.Name.EndsWith("TypeCode")) return column.Name;
switch (column.DataType)
{
case DbType.AnsiString: return "string";
case DbType.AnsiStringFixedLength: return "string";
case DbType.Binary: return "byte[]";
case DbType.Boolean: return "bool";
case DbType.Byte: return "byte";
case DbType.Currency: return "decimal";
case DbType.Date: return "DateTime";
case DbType.DateTime: return "DateTime";
case DbType.Decimal: return "decimal";
case DbType.Double: return "double";
case DbType.Guid: return "Guid";
case DbType.Int16: return "short";
case DbType.Int32: return "int";
case DbType.Int64: return "long";
case DbType.Object: return "object";
case DbType.SByte: return "sbyte";
case DbType.Single: return "float";
case DbType.String: return "string";
case DbType.StringFixedLength: return "string";
case DbType.Time: return "TimeSpan";
case DbType.UInt16: return "ushort";
case DbType.UInt32: return "uint";
case DbType.UInt64: return "ulong";
case DbType.VarNumeric: return "decimal";
default:
{
return "__UNKNOWN__" + column.NativeType;
}
}
}
public string GetReaderMethod(ColumnSchema column)
{
switch (column.DataType)
{
case DbType.Byte:
{
return "GetByte";
}
case DbType.Int16:
{
return "GetInt16";
}
case DbType.Int32:
{
return "GetInt32";
}
case DbType.Int64:
{
return "GetInt64";
}
case DbType.AnsiStringFixedLength:
case DbType.AnsiString:
case DbType.String:
case DbType.StringFixedLength:
{
return "GetString";
}
case DbType.Boolean:
{
return "GetBoolean";
}
case DbType.Guid:
{
return "GetGuid";
}
case DbType.Currency:
case DbType.Decimal:
{
return "GetDecimal";
}
case DbType.DateTime:
case DbType.Date:
{
return "GetDateTime";
}
case DbType.Binary:
{
return "GetBytes";
}
default:
{
return "__SQL__" + column.DataType;
}
}
}
public string GetSqlDbType(ColumnSchema column)
{
switch (column.NativeType)
{
case "bigint": return "BigInt";
case "binary": return "Binary";
case "bit": return "Bit";
case "char": return "Char";
case "datetime": return "DateTime";
case "decimal": return "Decimal";
case "float": return "Float";
case "image": return "Image";
case "int": return "Int";
case "money": return "Money";
case "nchar": return "NChar";
case "ntext": return "NText";
case "numeric": return "Decimal";
case "nvarchar": return "NVarChar";
case "real": return "Real";
case "smalldatetime": return "SmallDateTime";
case "smallint": return "SmallInt";
case "smallmoney": return "SmallMoney";
case "sql_variant": return "Variant";
case "sysname": return "NChar";
case "text": return "Text";
case "timestamp": return "Timestamp";
case "tinyint": return "TinyInt";
case "uniqueidentifier": return "UniqueIdentifier";
case "varbinary": return "VarBinary";
case "varchar": return "VarChar";
default: return "__UNKNOWN__" + column.NativeType;
}
}
public string GetPrimaryKeyType(TableSchema table)
{
if (table.PrimaryKey != null)
{
if (table.PrimaryKey.MemberColumns.Count == 1)
{
return GetCSharpVariableType(table.PrimaryKey.MemberColumns[0]);
}
else
{
throw new ApplicationException("This template will not work on primary keys with more than one member column.");
}
}
else
{
throw new ApplicationException("This template will only work on tables with a primary key.");
}
}
public override string GetFileName()
{
return this.GetClassName(this.SourceTable) + ".cs";
}
public string GetCamelCaseNameTrue(string value)
{
return value.Substring(0, 1).ToLower() + value.Substring(1);
}
#endregion script
</script>
Name:<%= GetClassName(SourceTable) %>
Author: sunfishlu
Description:
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="JScript" Description="Generates a very simple business object." ResponseEncoding="UTF-8" %>
<%@ Property Name="NameSpace" Type="String" Category="Text" Default="Sunfishlu." Description="The namespace to use for this class" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.Data" %>
/**
* @author sunfish
*/
var storeMain = new Ext.data.Store({
proxy:new Ext.data.HttpProxy({
url:'<%= GetUrlName(SourceTable) %>'
}),
reader:new Ext.data.JsonReader({
root:'data',
id:'<%= SourceTable.PrimaryKey.MemberColumns[0].Name %>',
totalProperty:'totalCount',
fields:
[
<% for (int i=0; i < SourceTable.Columns.Count; ++i) { %> <%=GetMemberVariableName(SourceTable.Columns[i])%><% if (i < SourceTable.Columns.Count - 1) { %>,<% }%><%}%>
]
}),
remoteSort:true
});
Ext.onReady(function(){
Ext.BLANK_IMAGE_URL = 'http://images.cnblogs.com/s.gif';
Ext.QuickTips.init();
var grid = new Ext.grid.GridPanel({
store:storeMain,
columns:
[
new Ext.grid.RowNumberer(),
<% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>
{header:"<%=GetHeaderName(SourceTable.Columns[i])%>",align:'center',sortable: true,dataIndex:<%=GetMemberVariableName(SourceTable.Columns[i])%>}<% if (i < SourceTable.Columns.Count - 1) { %>,<% } %>
<% } %>
],
renderTo:'grid',
viewConfig:{forceFit:true},
trackMouseOver:true,
loadMask: true,
autoShow : true,
autoScroll: true,
loadMask:{msg:"数据加载中,请稍等"},
bbar:new Ext.PagingToolbar({
pageSize:20,
store:storeMain,
displayInfo:true,
displayMsg:'当前显示 {0} - {1}条记录 /共 {2}条记录',
emptyMsg:"没有数据"
})
});
storeMain.load({params:{start:0, limit:20,sort:'<%= SourceTable.PrimaryKey.MemberColumns[0].Name %>',dir:'desc'}});
});
<script runat="template">
// My functions here.
public string GetClassName(TableSchema table)
{
if(table==null)
{
return null;
}
return table.Name + "Grid";
}
public string GetUrlName(TableSchema table)
{
if(table==null)
{
return null;
}
return table.Name + "Grid"+".aspx";
}
#region script
public string GetMemberVariableDeclarationStatement(ColumnSchema column)
{
return GetMemberVariableDeclarationStatement("private", column);
}
public string GetMemberVariableDeclarationStatement(string protectionLevel, ColumnSchema column)
{
string statement = protectionLevel + " ";
statement += GetCSharpVariableType(column) + " " + GetMemberVariableName(column);
string defaultValue = GetMemberVariableDefaultValue(column);
if (defaultValue != "")
{
statement += " = " + defaultValue;
}
statement += ";";
return statement;
}
public string GetConstructorParameters()
{
string ret = "";
foreach(ColumnSchema column in SourceTable.Columns)
{
ret += GetCSharpVariableType(column) + " " + GetCamelCaseName(GetPropertyName(column)) + ",/n/t/t/t";
}
return ret.Substring(0, ret.Length - 5);
}
public string GetAssignValue()
{
string ret = "";
foreach(ColumnSchema column in SourceTable.Columns)
{
ret += GetMemberVariableName(column) + (new String(' ', GetPropertyNameMaxLength() - GetPropertyNameLength(column))) + " = " + GetCamelCaseName(GetPropertyName(column)) + ";/n/t/t/t";
}
return ret;
}
public string GetReaderAssignmentStatement(ColumnSchema column, int index)
{
string statement = "if (!reader.IsDBNull(" + index.ToString() + ")) ";
statement += GetMemberVariableName(column) + " = ";
if (column.Name.EndsWith("TypeCode")) statement += "(" + column.Name + ")";
statement += "reader." + GetReaderMethod(column) + "(" + index.ToString() + ");";
return statement;
}
public string GetCamelCaseName(string value)
{
//return value.Substring(0, 1).ToLower() + value.Substring(1);
return value;
}
public string GetMemberVariableName(ColumnSchema column)
{
//string propertyName = GetPropertyName(column);
string propertyName = column.Name;
string memberVariableName = "'" +GetCamelCaseName(propertyName)+"'";
return memberVariableName;
}
public string GetHeaderName(ColumnSchema column)
{
//string propertyName = GetPropertyName(column);
string propertyName = column.Name;
string memberVariableName = GetCamelCaseName(propertyName);
return memberVariableName;
}
public string GetPropertyName(ColumnSchema column)
{
string propertyName = column.Name;
if (propertyName == column.Table.Name + "Name") return "Name";
if (propertyName == column.Table.Name + "Description") return "Description";
if (propertyName.EndsWith("TypeCode")) propertyName = propertyName.Substring(0, propertyName.Length - 4);
return propertyName;
}
public int GetPropertyNameLength(ColumnSchema column)
{
return (GetPropertyName(column)).Length;
}
public int GetPropertyNameMaxLength()
{
int ret = 0;
foreach(ColumnSchema column in SourceTable.Columns)
{
ret = ret < GetPropertyNameLength(column)?GetPropertyNameLength(column):ret;
}
return ret;
}
public string GetMemberVariableDefaultValue(ColumnSchema column)
{
if(column.IsPrimaryKeyMember)
{
return "";
}
switch (column.DataType)
{
case DbType.Guid:
{
return "Guid.Empty";
}
case DbType.AnsiString:
case DbType.AnsiStringFixedLength:
case DbType.String:
case DbType.StringFixedLength:
{
return "String.Empty";
}
default:
{
return "";
}
}
}
public string GetCSharpVariableType(ColumnSchema column)
{
if (column.Name.EndsWith("TypeCode")) return column.Name;
switch (column.DataType)
{
case DbType.AnsiString: return "string";
case DbType.AnsiStringFixedLength: return "string";
case DbType.Binary: return "byte[]";
case DbType.Boolean: return "bool";
case DbType.Byte: return "byte";
case DbType.Currency: return "decimal";
case DbType.Date: return "DateTime";
case DbType.DateTime: return "DateTime";
case DbType.Decimal: return "decimal";
case DbType.Double: return "double";
case DbType.Guid: return "Guid";
case DbType.Int16: return "short";
case DbType.Int32: return "int";
case DbType.Int64: return "long";
case DbType.Object: return "object";
case DbType.SByte: return "sbyte";
case DbType.Single: return "float";
case DbType.String: return "string";
case DbType.StringFixedLength: return "string";
case DbType.Time: return "TimeSpan";
case DbType.UInt16: return "ushort";
case DbType.UInt32: return "uint";
case DbType.UInt64: return "ulong";
case DbType.VarNumeric: return "decimal";
default:
{
return "__UNKNOWN__" + column.NativeType;
}
}
}
public string GetReaderMethod(ColumnSchema column)
{
switch (column.DataType)
{
case DbType.Byte:
{
return "GetByte";
}
case DbType.Int16:
{
return "GetInt16";
}
case DbType.Int32:
{
return "GetInt32";
}
case DbType.Int64:
{
return "GetInt64";
}
case DbType.AnsiStringFixedLength:
case DbType.AnsiString:
case DbType.String:
case DbType.StringFixedLength:
{
return "GetString";
}
case DbType.Boolean:
{
return "GetBoolean";
}
case DbType.Guid:
{
return "GetGuid";
}
case DbType.Currency:
case DbType.Decimal:
{
return "GetDecimal";
}
case DbType.DateTime:
case DbType.Date:
{
return "GetDateTime";
}
case DbType.Binary:
{
return "GetBytes";
}
default:
{
return "__SQL__" + column.DataType;
}
}
}
public string GetSqlDbType(ColumnSchema column)
{
switch (column.NativeType)
{
case "bigint": return "BigInt";
case "binary": return "Binary";
case "bit": return "Bit";
case "char": return "Char";
case "datetime": return "DateTime";
case "decimal": return "Decimal";
case "float": return "Float";
case "image": return "Image";
case "int": return "Int";
case "money": return "Money";
case "nchar": return "NChar";
case "ntext": return "NText";
case "numeric": return "Decimal";
case "nvarchar": return "NVarChar";
case "real": return "Real";
case "smalldatetime": return "SmallDateTime";
case "smallint": return "SmallInt";
case "smallmoney": return "SmallMoney";
case "sql_variant": return "Variant";
case "sysname": return "NChar";
case "text": return "Text";
case "timestamp": return "Timestamp";
case "tinyint": return "TinyInt";
case "uniqueidentifier": return "UniqueIdentifier";
case "varbinary": return "VarBinary";
case "varchar": return "VarChar";
default: return "__UNKNOWN__" + column.NativeType;
}
}
public string GetPrimaryKeyType(TableSchema table)
{
if (table.PrimaryKey != null)
{
if (table.PrimaryKey.MemberColumns.Count == 1)
{
return GetCSharpVariableType(table.PrimaryKey.MemberColumns[0]);
}
else
{
throw new ApplicationException("This template will not work on primary keys with more than one member column.");
}
}
else
{
throw new ApplicationException("This template will only work on tables with a primary key.");
}
}
public override string GetFileName()
{
return this.GetClassName(this.SourceTable) + ".cs";
}
public string GetCamelCaseNameTrue(string value)
{
return value.Substring(0, 1).ToLower() + value.Substring(1);
}
#endregion script
</script>
- codeSmith实现ExtJS中Grid代码生成
- EXTJS 中Grid控件的常用代码
- CodeSmith自动生成代码
- 使用CodeSmith 生成代码
- 调用CodeSmith类库实现代码生成(含源码)
- 利用CodeSmith在自己的工程中动态生成代码
- Extjs 中fields和grid的columns如何动态生成
- 代码生成工具 CodeSmith [转贴]
- codesmith 三层架构代码生成
- 何用CodeSmith 批量生成代码
- ExtJS中Grid分页
- ExtJS中的Grid表格实现删除行功能部分代码
- ExtJs动态grid的生成
- Extjs-Grid-动态生成columns
- ExtJs Grid自动生成列
- ExtJS 的 Grid中 如何让要让CheckboxSelectionModel 实现多选
- ext4中实现动态grid生成
- ext4中实现动态grid生成
- Delphi实现直线和圆的最小二承法拟合
- 如何手动创建oracle数据库(完整版)
- AJAX技术
- 品尝 GNU Prolog (3)
- 利用tslib为MiniGui提供触摸屏的IAL引擎(3)----tslib的交叉编译
- codeSmith实现ExtJS中Grid代码生成
- 自动适应输入内容高度的TextBox控件 (转)
- TWaver Flex谍照
- 利用tslib为MiniGui提供触摸屏的IAL引擎(2)---tslib 的 API 接口介绍
- “云计算”的基本原理和概念
- 利用tslib为MiniGui提供触摸屏的IAL引擎(1)---MiniGUI IAL简介
- [转]我的深圳面试体验--艾默生/西门子/华为/中兴/索尼/富士施乐/长城国际/ 马士基/SGS/宜家/
- 边学边用C语言
- 手把手教你在FC6下完整移植MiniGUI(六)(环境:EL-ARM-830)---移植MiniGUI2008-08-13 下午 06:12