codeSmith实现ExtJS中Grid代码生成

本文介绍了一个简单的CodeSmith模板,该模板可以根据数据库表自动生成ExtJs的Grid组件。模板包括了数据存储配置、列定义及分页工具栏等功能。

新的项目中。要使用ExtJs,为了简单,写了这么一个简单的CodeSmith模板来根据数据库中的表生成Grid。

代码如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><%--
Name:
<%=GetClassName(SourceTable)%>
Author:sunfishlu
Description:
--%>
<%@CodeTemplateLanguage="C#"TargetLanguage="JScript"Description="Generatesaverysimplebusinessobject."ResponseEncoding="UTF-8"%>
<%@PropertyName="NameSpace"Type="String"Category="Text"Default="Sunfishlu."Description="Thenamespacetouseforthisclass"%>
<%@PropertyName="SourceTable"Type="SchemaExplorer.TableSchema"Category="Context"Description="Tablethattheobjectisbasedon."%>
<%@AssemblyName="SchemaExplorer"%>
<%@AssemblyName="System.Data"%>
<%@ImportNamespace="SchemaExplorer"%>
<%@ImportNamespace="System.Data"%>

/**
*@authorsunfish
*/

varstoreMain=newExt.data.Store({
proxy:
newExt.data.HttpProxy({
url:
'<%=GetUrlName(SourceTable)%>'
}),
reader:
newExt.data.JsonReader({
root:
'data',
id:
'<%=SourceTable.PrimaryKey.MemberColumns[0].Name%>',
totalProperty:
'totalCount',
fields:
[
<%for(inti=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();
vargrid=newExt.grid.GridPanel({
store:storeMain,
columns:
[
newExt.grid.RowNumberer(),

<%for(inti=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:
newExt.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'}});
});
<scriptrunat="template">
//Myfunctionshere.
publicstringGetClassName(TableSchematable)
{
if(table==null)
{
returnnull;
}
returntable.Name+"Grid";
}
publicstringGetUrlName(TableSchematable)
{
if(table==null)
{
returnnull;
}
returntable.Name+"Grid"+".aspx";
}

#regionscript
publicstringGetMemberVariableDeclarationStatement(ColumnSchemacolumn)
{
returnGetMemberVariableDeclarationStatement("private",column);
}

publicstringGetMemberVariableDeclarationStatement(stringprotectionLevel,ColumnSchemacolumn)
{
stringstatement
=protectionLevel+"";
statement
+=GetCSharpVariableType(column)+""+GetMemberVariableName(column);

stringdefaultValue
=GetMemberVariableDefaultValue(column);
if(defaultValue!="")
{
statement
+="="+defaultValue;
}

statement
+=";";

returnstatement;
}

publicstringGetConstructorParameters()
{
stringret
="";
foreach(ColumnSchemacolumn
inSourceTable.Columns)
{
ret
+=GetCSharpVariableType(column)+""+GetCamelCaseName(GetPropertyName(column))+",/n/t/t/t";
}
returnret.Substring(0,ret.Length-5);
}

publicstringGetAssignValue()
{
stringret
="";
foreach(ColumnSchemacolumn
inSourceTable.Columns)
{
ret
+=GetMemberVariableName(column)+(newString('',GetPropertyNameMaxLength()-GetPropertyNameLength(column)))+"="+GetCamelCaseName(GetPropertyName(column))+";/n/t/t/t";
}
returnret;
}

publicstringGetReaderAssignmentStatement(ColumnSchemacolumn,
intindex)
{
stringstatement
="if(!reader.IsDBNull("+index.ToString()+"))";
statement
+=GetMemberVariableName(column)+"=";

if(column.Name.EndsWith("TypeCode"))statement+="("+column.Name+")";

statement
+="reader."+GetReaderMethod(column)+"("+index.ToString()+");";

returnstatement;
}

publicstringGetCamelCaseName(stringvalue)
{
//returnvalue.Substring(0,1).ToLower()+value.Substring(1);
returnvalue;
}

publicstringGetMemberVariableName(ColumnSchemacolumn)
{
//stringpropertyName=GetPropertyName(column);
stringpropertyName=column.Name;
stringmemberVariableName
="'"+GetCamelCaseName(propertyName)+"'";

returnmemberVariableName;
}
publicstringGetHeaderName(ColumnSchemacolumn)
{
//stringpropertyName=GetPropertyName(column);
stringpropertyName=column.Name;
stringmemberVariableName
=GetCamelCaseName(propertyName);

returnmemberVariableName;
}

publicstringGetPropertyName(ColumnSchemacolumn)
{
stringpropertyName
=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);

returnpropertyName;
}

public
intGetPropertyNameLength(ColumnSchemacolumn)
{
return(GetPropertyName(column)).Length;
}
public
intGetPropertyNameMaxLength()
{
intret=0;
foreach(ColumnSchemacolumn
inSourceTable.Columns)
{
ret
=ret<GetPropertyNameLength(column)?GetPropertyNameLength(column):ret;
}
returnret;
}

publicstringGetMemberVariableDefaultValue(ColumnSchemacolumn)
{
if(column.IsPrimaryKeyMember)
{
return"";
}
switch(column.DataType)
{
caseDbType.Guid:
{
return"Guid.Empty";
}
caseDbType.AnsiString:
caseDbType.AnsiStringFixedLength:
caseDbType.String:
caseDbType.StringFixedLength:
{
return"String.Empty";
}
default:
{
return"";
}
}
}

publicstringGetCSharpVariableType(ColumnSchemacolumn)
{
if(column.Name.EndsWith("TypeCode"))returncolumn.Name;

switch(column.DataType)
{
caseDbType.AnsiString:return"string";
caseDbType.AnsiStringFixedLength:return"string";
caseDbType.Binary:return"byte[]";
caseDbType.Boolean:return"bool";
caseDbType.Byte:return"byte";
caseDbType.Currency:return"decimal";
caseDbType.Date:return"DateTime";
caseDbType.DateTime:return"DateTime";
caseDbType.Decimal:return"decimal";
caseDbType.Double:return"double";
caseDbType.Guid:return"Guid";
caseDbType.Int16:return"short";
caseDbType.Int32:return"int";
caseDbType.Int64:return"long";
caseDbType.Object:return"object";
caseDbType.SByte:return"sbyte";
caseDbType.Single:return"float";
caseDbType.String:return"string";
caseDbType.StringFixedLength:return"string";
caseDbType.Time:return"TimeSpan";
caseDbType.UInt16:return"ushort";
caseDbType.UInt32:return"uint";
caseDbType.UInt64:return"ulong";
caseDbType.VarNumeric:return"decimal";
default:
{
return"__UNKNOWN__"+column.NativeType;
}
}
}

publicstringGetReaderMethod(ColumnSchemacolumn)
{
switch(column.DataType)
{
caseDbType.Byte:
{
return"GetByte";
}
caseDbType.Int16:
{
return"GetInt16";
}
caseDbType.Int32:
{
return"GetInt32";
}
caseDbType.Int64:
{
return"GetInt64";
}
caseDbType.AnsiStringFixedLength:
caseDbType.AnsiString:
caseDbType.String:
caseDbType.StringFixedLength:
{
return"GetString";
}
caseDbType.Boolean:
{
return"GetBoolean";
}
caseDbType.Guid:
{
return"GetGuid";
}
caseDbType.Currency:
caseDbType.Decimal:
{
return"GetDecimal";
}
caseDbType.DateTime:
caseDbType.Date:
{
return"GetDateTime";
}
caseDbType.Binary:
{
return"GetBytes";
}
default:
{
return"__SQL__"+column.DataType;
}
}
}
publicstringGetSqlDbType(ColumnSchemacolumn)
{
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;
}
}

publicstringGetPrimaryKeyType(TableSchematable)
{
if(table.PrimaryKey!=null)
{
if(table.PrimaryKey.MemberColumns.Count==1)
{
returnGetCSharpVariableType(table.PrimaryKey.MemberColumns[0]);
}
else
{
thrownewApplicationException("Thistemplatewillnotworkonprimarykeyswithmorethanonemembercolumn.");
}
}
else
{
thrownewApplicationException("Thistemplatewillonlyworkontableswithaprimarykey.");
}
}

publicoverridestringGetFileName()
{
returnthis.GetClassName(this.SourceTable)+".cs";
}

publicstringGetCamelCaseNameTrue(stringvalue)
{
returnvalue.Substring(0,1).ToLower()+value.Substring(1);
}
#endregionscript
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值