<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="CS_ClassTemplate" xml:space="preserve">
<value><%@ Page Language="C#" %>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%
//The data we need
string providerName = "#PROVIDER#";
string tableName = "#TABLE#";
TableSchema.Table tbl = DataService.GetSchema(tableName, providerName, TableType.Table);
DataProvider provider = DataService.Providers[providerName];
LanguageType lang = LanguageType.CSharp;
TableSchema.TableColumnCollection cols = tbl.Columns;
string className = tbl.ClassName;
string thisPK = tbl.PrimaryKey.PropertyName;
string varPK = tbl.PrimaryKey.ArgumentName;
string varPKType = Utility.GetVariableType(tbl.PrimaryKey.DataType, tbl.PrimaryKey.IsNullable, lang);
%>
//Generated on <%=DateTime.Now.ToString() %> by <%=Environment.UserName %>
namespace <%=provider.GeneratedNamespace %>{
/// <summary>
/// Strongly-typed collection for the <%=className%> class.
/// </summary>
[Serializable]
public partial class <%=className%>Collection : ActiveList[<]<%= className%>[>]
{
List[<]Where[>] wheres = new List[<]Where[>]();
List[<]BetweenAnd[>] betweens = new List[<]BetweenAnd[>]();
SubSonic.OrderBy orderBy;
public <%=className%>Collection OrderByAsc(string columnName)
{
this.orderBy = SubSonic.OrderBy.Asc(columnName);
return this;
}
public <%=className%>Collection OrderByDesc(string columnName)
{
this.orderBy = SubSonic.OrderBy.Desc(columnName);
return this;
}
public <%=className%>Collection WhereDatesBetween(string columnName, DateTime dateStart, DateTime dateEnd)
{
return BetweenAnd(columnName, dateStart, dateEnd);
}
public <%=className%>Collection Where(Where where)
{
wheres.Add(where);
return this;
}
public <%=className%>Collection Where(string columnName, object value)
{
if(value != DBNull.Value && value != null)
{
return Where(columnName, Comparison.Equals, value);
}
else
{
return Where(columnName, Comparison.Is, DBNull.Value);
}
}
public <%=className%>Collection Where(string columnName, Comparison comp, object value)
{
Where where = new Where();
where.ColumnName = columnName;
where.Comparison = comp;
where.ParameterValue = value;
Where(where);
return this;
}
public <%=className%>Collection BetweenAnd(string columnName, DateTime dateStart, DateTime dateEnd)
{
BetweenAnd between = new BetweenAnd();
between.ColumnName = columnName;
between.StartDate = dateStart;
between.EndDate = dateEnd;
between.StartParameterName = "start" + columnName;
between.EndParameterName = "end" + columnName;
betweens.Add(between);
return this;
}
public <%=className%>Collection Load()
{
Query qry = new Query(<%=className%>.Schema);
CheckLogicalDelete(qry);
foreach (Where where in wheres)
{
qry.AddWhere(where);
}
foreach (BetweenAnd between in betweens)
{
qry.AddBetweenAnd(between);
}
if (orderBy != null)
{
qry.OrderBy = orderBy;
}
IDataReader rdr = qry.ExecuteReader();
this.Load(rdr);
rdr.Close();
return this;
}
public <%=className%>Collection()
{
}
}
/// <summary>
/// This is an ActiveRecord class which wraps the <%=tableName%> table.
/// </summary>
[Serializable]
public partial class <%=className%> : ActiveRecord[<]<%= className%>[>]
{
#region Default Settings
protected static void SetSQLProps()
{
GetTableSchema();
}
#endregion
#region Schema Accessor
public static TableSchema.Table Schema
{
get
{
if (BaseSchema == null)
{
SetSQLProps();
}
return BaseSchema;
}
}
private static void GetTableSchema()
{
if(!IsSchemaInitialized)
{
//Schema declaration
TableSchema.Table schema = new TableSchema.Table("<%=tableName%>", TableType.Table, DataService.GetInstance("<%=providerName%>"));
schema.Columns = new TableSchema.TableColumnCollection();
schema.SchemaName = "<%=tbl.SchemaName%>";
//columns
<%
foreach(TableSchema.TableColumn col in cols)
{
string varName = "col" + col.ArgumentName;
%>
TableSchema.TableColumn <%=varName %> = new TableSchema.TableColumn(schema);
<%=varName %>.ColumnName = "<%=col.ColumnName%>";
<%=varName %>.DataType = DbType.<%=col.DataType %>;
<%=varName %>.MaxLength = <%=col.MaxLength %>;
<%=varName %>.AutoIncrement = <%=col.AutoIncrement.ToString().ToLower() %>;
<%=varName %>.IsNullable = <%=col.IsNullable.ToString().ToLower()%>;
<%=varName %>.IsPrimaryKey = <%=col.IsPrimaryKey.ToString().ToLower()%>;
<%=varName %>.IsForeignKey = <%=col.IsForeignKey.ToString().ToLower()%>;
<%=varName %>.IsReadOnly = <%= col.IsReadOnly.ToString().ToLower() %>;
<% if (!String.IsNullOrEmpty(col.DefaultSetting))
{
%>
<%=varName%>.DefaultSetting = @"<%= col.DefaultSetting%>";
<%
}
%>
<%
if(col.IsForeignKey)
{
%>
<%=varName %>.ForeignKeyTableName = "<%= col.ForeignKeyTableName %>";
<% } %>
schema.Columns.Add(<%=varName%>);
<%
}
%>
BaseSchema = schema;
//add this schema to the provider
//so we can query it later
DataService.Providers["<%=providerName %>"].AddSchema("<%=tableName%>",schema);
}
}
#endregion
#region Query Accessor
public static Query CreateQuery()
{
return new Query(Schema);
}
#endregion
#region .ctors
public <%=className %>()
{
SetSQLProps();
SetDefaults();
MarkNew();
}
public <%=className %>(object keyID)
{
SetSQLProps();
SetDefaults();
LoadByKey(keyID);
}
public <%=className %>(string columnName, object columnValue)
{
SetSQLProps();
SetDefaults();
LoadByParam(columnName,columnValue);
}
#endregion
#region Props
<%
foreach(TableSchema.TableColumn col in cols){
string propName = col.PropertyName;
string varType = Utility.GetVariableType(col.DataType, col.IsNullable, lang);
%>
[XmlAttribute("<%=propName%>")]
public <%=varType%> <%=propName%>
{
get { return GetColumnValue[<]<%= varType%>[>]("<%= col.ColumnName %>"); }
set
{
MarkDirty();
SetColumnValue("<%=col.ColumnName %>", value);
}
}
<%
}
%>
#endregion
<%if (tbl.PrimaryKeyTables.Count > 0)
{%>
#region PrimaryKey Methods
<%
TableSchema.PrimaryKeyTableCollection pkTables = tbl.PrimaryKeyTables;
if (pkTables != null)
{
ArrayList usedMethodNames = new ArrayList();
foreach (TableSchema.PrimaryKeyTable pk in pkTables)
{
TableSchema.Table pkTbl = DataService.GetSchema(pk.TableName, providerName, TableType.Table);
if (pkTbl.PrimaryKey != null)
{
string pkClass = pk.ClassName;
string pkClassQualified = provider.GeneratedNamespace + "." + pkClass;
string pkMethod = pk.ClassNamePlural;
string pkColumn = pk.PropertyName;
if (Utility.IsMatch(pkClass, pkMethod))
{
pkMethod += "Records";
}
if (pk.ClassName == className)
{
pkMethod = "Child" + pkMethod;
}
if (usedMethodNames.Contains(pkMethod))
{
pkMethod += "From" + className;
if (usedMethodNames.Contains(pkMethod))
{
pkMethod += pkColumn;
}
}
usedMethodNames.Add(pkMethod);
if(!String.IsNullOrEmpty(provider.RelatedTableLoadPrefix))
{
pkMethod = provider.RelatedTableLoadPrefix + pkMethod;
}
bool methodsNoLazyLoad = !provider.GenerateRelatedTablesAsProperties && !provider.GenerateLazyLoads;
bool methodsLazyLoad = !provider.GenerateRelatedTablesAsProperties && provider.GenerateLazyLoads;
bool propertiesNoLazyLoad = provider.GenerateRelatedTablesAsProperties && !provider.GenerateLazyLoads;
bool propertiesLazyLoad = provider.GenerateRelatedTablesAsProperties && provider.GenerateLazyLoads;
if (methodsNoLazyLoad)
{
%>
public <%= pkClassQualified %>Collection <%=pkMethod%>()
{
return new <%=pkClassQualified%>Collection().Where(<%=pkTbl.ClassName%>.Columns.<%=pkColumn%>, <%=tbl.PrimaryKey.PropertyName%>).Load();
}
<%
}
else if (methodsLazyLoad)
{
%>
private <%= pkClassQualified %>Collection col<%=pkMethod%>;
public <%= pkClassQualified %>Collection <%=pkMethod%>()
{
if(col<%=pkMethod%> == null)
{
col<%=pkMethod%> = new <%= pkClassQualified %>Collection().Where(<%=pkTbl.ClassName%>.Columns.<%=pkColumn%>, <%=tbl.PrimaryKey.PropertyName%>).Load();
}
return col<%=pkMethod%>;
}
<%
}
else if (propertiesNoLazyLoad)
{
%>
public <%= pkClassQualified %>Collection <%=pkMethod%>
{
get
{
return new <%= pkClassQualified %>Collection().Where(<%=pkTbl.ClassName%>.Columns.<%=pkColumn%>, <%=tbl.PrimaryKey.PropertyName%>).Load();
}
}
<%
}
else if (propertiesLazyLoad)
{
%>
private <%= pkClassQualified %>Collection col<%=pkMethod%>;
public <%= pkClassQualified %>Collection <%=pkMethod%>
{
get
{
if(col<%=pkMethod%> == null)
{
col<%=pkMethod%> = new <%= pkClassQualified %>Collection().Where(<%=pkTbl.ClassName%>.Columns.<%=pkColumn%>, <%=tbl.PrimaryKey.PropertyName%>).Load();
}
return col<%=pkMethod%>;
}
}
<%
}
}
}
}
%>
#endregion
<%
}
%>
<%if (tbl.ForeignKeys.Count > 0) { %>
#region ForeignKey Properties
<%
TableSchema.ForeignKeyTableCollection fkTables = tbl.ForeignKeys;
if (fkTables != null) {
ArrayList usedPropertyNames = new ArrayList();
foreach (TableSchema.ForeignKeyTable fk in fkTables)
{
TableSchema.Table fkTbl = DataService.GetSchema(fk.TableName, providerName, TableType.Table);
string fkClass = fk.ClassName;
string fkClassQualified = provider.GeneratedNamespace + "." + fkClass;
string fkMethod = fk.ClassName;
string fkID = fk.PropertyName;
//it's possible this table is "relatin to itself"
//check to make sure the class names are not the same
//if they are, use the fk columnName
if (fk.ClassName == className)
{
fkMethod = "Parent" + fk.ClassName;
}
if (usedPropertyNames.Contains(fk.ClassName))
{
fkMethod += "To" + fkID;
}
if(tbl.GetColumn(fkMethod) != null)
{
fkMethod += "Record";
}
%>
/// <summary>
/// Returns a <%=fkClass%> ActiveRecord object related to this <%=className%>
/// </summary>
public <%=fkClassQualified%> <%=fkMethod%>
{
get { return <%=fkClassQualified%>.FetchByID(this.<%=fkID%>); }
set
{
MarkDirty();
SetColumnValue("<%=fkID%>", value.<%=fkTbl.PrimaryKey.PropertyName%>);
}
}
<%
usedPropertyNames.Add(fk.ClassName);
}
}
%>
#endregion
<%} else {%>
//no foreign key tables defined (<%=tbl.ForeignKeys.Count.ToString() %>)
<%} %>
<%if (tbl.ManyToManys.Count > 0) { %>
#region Many To Many Helpers
<%
TableSchema.ManyToManyRelationshipCollection mm = tbl.ManyToManys;
if (mm != null)
{
ArrayList usedConstraints = new ArrayList();
foreach (TableSchema.ManyToManyRelationship m in mm)
{
if (!usedConstraints.Contains(m.ForeignTableClassName))
{
usedConstraints.Add(m.ForeignTableClassName);
string fkClass = m.ForeignTableClassName;
string fkClassQualified = provider.GeneratedNamespace + "." + fkClass;
%>
public <%=fkClassQualified%>Collection Get<%=fkClass%>Collection() {
return <%=className%>.Get<%=fkClass%>Collection(this.<%=thisPK%>);
}
public static <%=fkClassQualified%>Collection Get<%=fkClass%>Collection(<%= varPKType%> <%= varPK%>) {
SubSonic.QueryCommand cmd = new SubSonic.QueryCommand(
"SELECT * FROM <%=m.ForeignTableName%> INNER JOIN <%=m.MapTableName%> ON "+
"<%=m.ForeignTableName%>.<%=m.ForeignPrimaryKey%>=<%=m.MapTableName%>.<%=m.MapTableForeignTableKeyColumn%> WHERE <%=m.MapTableName%>.<%=m.MapTableLocalTableKeyColumn%>=@<%=m.MapTableLocalTableKeyColumn%>", <%=className%>.Schema.Provider.Name);
cmd.AddParameter("@<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>);
IDataReader rdr = SubSonic.DataService.GetReader(cmd);
<%=fkClass%>Collection coll = new <%=fkClass%>Collection();
coll.LoadAndCloseReader(rdr);
return coll;
}
public static void Save<%=fkClass%>Map(<%= varPKType%> <%= varPK%>, <%=fkClass%>Collection items) {
QueryCommandCollection coll = new SubSonic.QueryCommandCollection();
//delete out the existing
QueryCommand cmdDel = new QueryCommand("DELETE FROM <%=m.MapTableName%> WHERE <%=m.MapTableLocalTableKeyColumn%>=@<%=m.MapTableLocalTableKeyColumn%>", <%=className%>.Schema.Provider.Name);
cmdDel.AddParameter("@<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>);
//add this in
coll.Add(cmdDel);
DataService.ExecuteTransaction(coll);
foreach (<%=fkClass%> item in items)
{
<%=m.ClassName%> var<%=m.ClassName%> = new <%= m.ClassName%>();
var<%=m.ClassName%>.SetColumnValue("<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>);
var<%=m.ClassName%>.SetColumnValue("<%=m.MapTableForeignTableKeyColumn%>", item.GetPrimaryKeyValue());
var<%=m.ClassName%>.Save();
}
}
public static void Save<%=fkClass%>Map(<%= varPKType%> <%= varPK%>, System.Web.UI.WebControls.ListItemCollection itemList)
{
QueryCommandCollection coll = new SubSonic.QueryCommandCollection();
//delete out the existing
QueryCommand cmdDel = new QueryCommand("DELETE FROM <%=m.MapTableName%> WHERE <%=m.MapTableLocalTableKeyColumn%>=@<%=m.MapTableLocalTableKeyColumn%>", <%=className%>.Schema.Provider.Name);
cmdDel.AddParameter("@<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>);
//add this in
coll.Add(cmdDel);
DataService.ExecuteTransaction(coll);
foreach (System.Web.UI.WebControls.ListItem l in itemList)
{
if (l.Selected)
{
<%=m.ClassName%> var<%=m.ClassName%> = new <%= m.ClassName%>();
var<%=m.ClassName%>.SetColumnValue("<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>);
var<%=m.ClassName%>.SetColumnValue("<%=m.MapTableForeignTableKeyColumn%>", l.Value);
var<%=m.ClassName%>.Save();
}
}
}
public static void Save<%=fkClass%>Map(<%= varPKType%> <%= varPK%> , <%= varPKType%>[] itemList)
{
QueryCommandCollection coll = new SubSonic.QueryCommandCollection();
//delete out the existing
QueryCommand cmdDel = new QueryCommand("DELETE FROM <%=m.MapTableName%> WHERE <%=m.MapTableLocalTableKeyColumn%>=@<%=m.MapTableLocalTableKeyColumn%>", <%=className%>.Schema.Provider.Name);
cmdDel.AddParameter("@<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>);
//add this in
coll.Add(cmdDel);
DataService.ExecuteTransaction(coll);
foreach (<%= varPKType%> item in itemList)
{
<%=m.ClassName%> var<%=m.ClassName%> = new <%= m.ClassName%>();
var<%=m.ClassName%>.SetColumnValue("<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>);
var<%=m.ClassName%>.SetColumnValue("<%=m.MapTableForeignTableKeyColumn%>", item);
var<%=m.ClassName%>.Save();
}
}
public static void Delete<%=fkClass%>Map(<%= varPKType%> <%= varPK%>)
{
QueryCommand cmdDel = new QueryCommand("DELETE FROM <%=m.MapTableName%> WHERE <%=m.MapTableLocalTableKeyColumn%>=@<%=m.MapTableLocalTableKeyColumn%>", <%=className%>.Schema.Provider.Name);
cmdDel.AddParameter("@<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>);
DataService.ExecuteQuery(cmdDel);
}
<%
}
}
}
%>
#endregion
<%} else {%>
//no ManyToMany tables defined (<%=tbl.ManyToManys.Count.ToString() %>)
<%} %>
#region ObjectDataSource support
<%
string insertArgs = string.Empty;
string updateArgs = string.Empty;
string seperator = ",";
foreach (TableSchema.TableColumn col in cols)
{
string propName = col.ArgumentName;
string varType = Utility.GetVariableType(col.DataType, col.IsNullable, lang);
updateArgs += varType + " " + propName + seperator;
if (!col.AutoIncrement)
{
insertArgs += varType + " " + propName + seperator;
}
}
if (insertArgs.Length > 0)
insertArgs = insertArgs.Remove(insertArgs.Length - seperator.Length, seperator.Length);
if (updateArgs.Length > 0)
updateArgs = updateArgs.Remove(updateArgs.Length - seperator.Length, seperator.Length);
%>
/// <summary>
/// Inserts a record, can be used with the Object Data Source
/// </summary>
public static void Insert(<%=insertArgs%>)
{
<%=className %> item = new <%=className %>();
<%
foreach (TableSchema.TableColumn col in cols) {
if (!col.AutoIncrement) {
%>
item.<%=col.PropertyName%> = <%=col.ArgumentName%>;
<%
}
}
%>
if (System.Web.HttpContext.Current != null)
item.Save(System.Web.HttpContext.Current.User.Identity.Name);
else
item.Save(System.Threading.Thread.CurrentPrincipal.Identity.Name);
}
/// <summary>
/// Updates a record, can be used with the Object Data Source
/// </summary>
public static void Update(<%=updateArgs%>)
{
<%=className %> item = new <%=className %>();
<%
foreach (TableSchema.TableColumn col in cols)
{
%>
item.<%=col.PropertyName%> = <%=col.ArgumentName%>;
<%
}
%>
item.IsNew = false;
if (System.Web.HttpContext.Current != null)
item.Save(System.Web.HttpContext.Current.User.Identity.Name);
else
item.Save(System.Threading.Thread.CurrentPrincipal.Identity.Name);
}
#endregion
#region Columns Struct
public struct Columns
{
<%
foreach (TableSchema.TableColumn col in cols) {
string propName = col.PropertyName;
%>
public static string <%=propName%> = @"<%=col.ColumnName%>";
<%
}
%>
}
#endregion
}
}</value>
</data>
<data name="CS_DynamicScaffold" xml:space="preserve">
<value><%@ Page Language="C#" %>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%
string masterPage = "#MASTERPAGE#";
string tableName = "#TABLENAME#";
string className = "#CLASSNAME#";
string language = "#LANGUAGE#";
%>
<%
if (!String.IsNullOrEmpty(masterPage))
{
%>
[<]%@ Page Language="<%= language %>" Title="<%= className %> Scaffold" MasterPageFile="<%= masterPage %>" Theme="default" %[>]
[<]%@ Register Assembly="SubSonic" Namespace="SubSonic" TagPrefix="cc1" %[>]
[<]asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="server"[>]
[<]div[>]
[<]cc1:Scaffold ID="Scaffold1" runat="server" TableName="<%= tableName %>" GridViewSkinID="scaffold" EditTableItemCaptionCellCssClass="scaffoldEditLabel" ButtonCssClass="scaffoldButton" TextBoxCssClass="scaffoldTextBox"[>]
[<]/cc1:Scaffold[>]
[<]/div[>]
[<]/asp:Content[>]
<%
}
else
{
%>
[<]%@ Page Language="<%= language %>" Title="<%=className%> Scaffold" %[>]
[<]%@ Register Assembly="SubSonic" Namespace="SubSonic" TagPrefix="cc1" %[>]
[<]!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"[>]
[<]script language="javascript" type="text/javascript"[>]
function CheckDelete()
{
return confirm('Delete this record? This action cannot be undone...');
}
function imposeMaxLength(e, Object, MaxLen, rowIndex)
{
var keyCode = e.keyCode;
var counter = document.getElementById('counter' + rowIndex);
var charText = Object.value;
var charCount = charText.length;
var charRemain = MaxLen - charCount;
counter.style.visibility = 'visible';
if(keyCode == 8 || keyCode == 46)
{
if(charCount == MaxLen)
{
charRemain = 1;
}
else if(charCount == 0)
{
charRemain = MaxLen;
}
counter.innerHTML = charRemain;
return true;
}
else
{
if(charRemain [>] 0)
{
counter.innerHTML = charRemain;
return true;
}
else
{
Object.value = charText.substring(0, MaxLen);
counter.innerHTML = '0';
return false;
}
}
}
[<]/script[>]
[<]/head[>]
[<]body[>]
[<]form id="form1" runat="server"[>]
[<]div[>]
[<]cc1:Scaffold ID="Scaffold1" runat="server" TableName="<%= tableName %>" GridViewSkinID="scaffold" EditTableItemCaptionCellCssClass="scaffoldEditLabel" ButtonCssClass="scaffoldButton" TextBoxCssClass="scaffoldTextBox"[>]
[<]/cc1:Scaffold[>]
[<]/div[>]
[<]/form[>]
[<]/body[>]
[<]/html[>]
<%
}
%></value>
</data>
<data name="CS_GeneratedScaffoldCodeBehind" xml:space="preserve">
<value><%@ Page Language="C#" %>
<%@ Import namespace="System.Data"%>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%
//The data we need
string providerName = "#PROVIDER#";
string tableName = "#TABLENAME#";
string generatedClassName = "#PAGEFILE#";
TableSchema.Table tbl = DataService.GetSchema(tableName, providerName, TableType.Table);
DataProvider provider = DataService.Providers[providerName];
//The main vars we need
string className = tbl.ClassName;
%>
//Generated on <%=DateTime.Now.ToString()%> by <%=Environment.UserName%>
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using SubSonic;
using SubSonic.Utilities;
using <%=provider.GeneratedNamespace%>;
namespace <%=provider.GeneratedNamespace%>
{
public partial class <%=generatedClassName%> : System.Web.UI.Page
{
private bool isAdd = false;
private const string SORT_DIRECTION = "SORT_DIRECTION";
private const string ORDER_BY = "ORDER_BY";
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["id"] != null)
{
string id = Utility.GetParameter("id");
if (!String.IsNullOrEmpty(id) && id != "0")
{
if (!Page.IsPostBack)
{
LoadEditor(id);
}
}
else
{
//it's an add, show the editor
isAdd = true;
ToggleEditor(true);
LoadDrops();
btnDelete.Visible = false;
}
}
else
{
ToggleEditor(false);
if(!Page.IsPostBack)
{
BindGrid(String.Empty);
}
}
}
/// <summary>
/// Loads the editor with data
/// </summary>
/// <param name="id"></param>
void LoadEditor(string id)
{
ToggleEditor(true);
LoadDrops();
if (!String.IsNullOrEmpty(id) && id != "0")
{
lblID.Text = id.ToString();
//pull the record
<%=className%> item = new <%=className%>(id);
//bind the page
<%
foreach (TableSchema.TableColumn col in tbl.Columns)
{
if (!col.IsPrimaryKey)
{
bool toString = true;
string controlAssignment = null;
bool isNullableType = (col.IsNullable && Utility.IsNullableDbType(col.DataType));
if (col.IsForeignKey)
{
toString = true;
controlAssignment = ControlValueProperty.DROP_DOWN_LIST;
}
else if (Utility.IsMatch(col.ColumnName, ReservedColumnName.CREATED_ON) || Utility.IsMatch(col.ColumnName, ReservedColumnName.MODIFIED_ON))
{
toString = true;
controlAssignment = ControlValueProperty.LABEL;
}
else
{
switch (col.DataType)
{
case DbType.Binary:
case DbType.Byte:
break;
case DbType.DateTime:
toString = false;
controlAssignment = ControlValueProperty.CALENDAR;
break;
case DbType.Boolean:
toString = false;
controlAssignment = ControlValueProperty.CHECK_BOX;
break;
case DbType.Currency:
case DbType.VarNumeric:
toString = true;
controlAssignment = ControlValueProperty.TEXT_BOX;
break;
case DbType.Int16:
case DbType.Int32:
case DbType.UInt16:
case DbType.Int64:
case DbType.UInt32:
case DbType.UInt64:
case DbType.Single:
case DbType.Decimal:
case DbType.Double:
toString = true;
controlAssignment = ControlValueProperty.TEXT_BOX;
break;
case DbType.AnsiString:
case DbType.AnsiStringFixedLength:
case DbType.String:
toString = false;
controlAssignment = ControlValueProperty.TEXT_BOX;
break;
default:
toString = true;
controlAssignment = ControlValueProperty.TEXT_BOX;
break;
}
}
string propName = col.PropertyName;
string controlID = "ctrl" + propName;
if (!String.IsNullOrEmpty(controlAssignment))
{
if (isNullableType)
{%>
if(item.<%=propName%>.HasValue)
{
<%
if (toString)
{%>
<%=controlID%>.<%=controlAssignment%> = item.<%=propName%>.Value.ToString();
<%
}
else
{%>
<%=controlID%>.<%=controlAssignment%> = item.<%=propName%>.Value;
<%
}%>
}
<%
}
else
{
if (toString)
{%>
<%=controlID%>.<%=controlAssignment%> = item.<%=propName%>.ToString();
<%
}
else
{%>
<%=controlID%>.<%=controlAssignment%> = item.<%=propName%>;
<%
}
}
}
}
}
%>
//set the delete confirmation
btnDelete.Attributes.Add("onclick", "return CheckDelete();");
}
}
/// <summary>
/// Loads the DropDownLists
/// </summary>
void LoadDrops()
{
//load the listboxes
<%
foreach (TableSchema.TableColumn col in tbl.Columns)
{
string controlName = "ctrl" + col.PropertyName;
if (!col.IsPrimaryKey)
{
if(col.IsForeignKey)
{
TableSchema.Table FKTable = DataService.GetForeignKeyTable(col, tbl);
if(FKTable != null)
{
%>
Query qry<%= controlName %> = <%= FKTable.ClassName %>.CreateQuery();
qry<%= controlName %>.OrderBy = OrderBy.Asc("<%= FKTable.Columns[1].ColumnName %>");
Utility.LoadDropDown(<%= controlName %>, qry<%= controlName %>.ExecuteReader(), true);
<%
if(col.IsNullable)
{
%> <%= controlName %>.Items.Insert(0, new ListItem("(Not Specified)", String.Empty));
<%
}
}
}
}
}
%>
}
/// <summary>
/// Shows/Hides the Grid and Editor panels
/// </summary>
/// <param name="showIt"></param>
void ToggleEditor(bool showIt)
{
pnlEdit.Visible = showIt;
pnlGrid.Visible = !showIt;
}
protected void btnAdd_Click(object sender, EventArgs e)
{
LoadEditor("0");
}
protected void btnDelete_Click(object sender, EventArgs e)
{
<%= className %>.Delete(Utility.GetParameter("id"));
//redirect
Response.Redirect(Request.CurrentExecutionFilePath);
}
protected void btnSave_Click(object sender, EventArgs e)
{
string id = Utility.GetParameter("id");
//bool haveError = false;
try
{
BindAndSave(id);
lblResult.Text = "[<]span style=\"font-weight:bold; color:#22bb22\"[>]Customer saved.[<]/span[>]";
}
catch (Exception x)
{
//haveError = true;
lblResult.Text = "[<]span style=\"font-weight:bold; color:#990000\"[>]Customer not saved:[<]/span[>] " + x.Message;
}
//if(!haveError)
// Response.Redirect(Request.CurrentExecutionFilePath);
}
/// <summary>
/// Binds and saves the data
/// </summary>
/// <param name="id"></param>
void BindAndSave(string id)
{
<%= className %> item;
if (!String.IsNullOrEmpty(id) && id != "0")
{
//it's an edit
item = new <%= className %>(id);
}
else
{
//add
item = new <%= className %>();
}
<%
foreach (TableSchema.TableColumn col in tbl.Columns)
{
if (!col.IsPrimaryKey && col.DataType != DbType.Binary && col.DataType != DbType.Byte)
{
string controlID = "ctrl" + col.PropertyName;
string propName = col.PropertyName;
string converterType;
switch (col.DataType)
{
case DbType.Currency:
case DbType.VarNumeric:
converterType = "Decimal";
break;
case DbType.AnsiString:
case DbType.AnsiStringFixedLength:
converterType = "String";
break;
default:
converterType = col.DataType.ToString();
break;
}
%>
object val<%= controlID %> = Utility.GetDefaultControlValue(<%= className %>.Schema.GetColumn("<%= col.ColumnName %>"), <%= controlID %>, isAdd, false);
<%
if (col.IsNullable)
{
%>
if(val<%= controlID %> == null)
{
item.<%= propName %> = null;
}
else
{
<%
}
if (col.DataType != DbType.Guid)
{
%>
item.<%= propName %> = Convert.To<%= converterType %>(val<%= controlID %>);
<%
}
else
{
%>
item.<%= propName %> = new <%= converterType %>(val<%= controlID %>.ToString());
<%
}
if (col.IsNullable)
{
%>
}
<%
}
}
}
%>
//bind it
item.Save(User.Identity.Name);
}
/// <summary>
/// Binds the GridView
/// </summary>
private void BindGrid(string orderBy)
{
TableSchema.Table tblSchema = DataService.GetTableSchema("<%= tbl.Name %>", "<%= tbl.Provider.Name %>");
if (tblSchema.PrimaryKey != null)
{
Query query = new Query(tblSchema);
string sortColumn = null;
if (!String.IsNullOrEmpty(orderBy))
{
sortColumn = orderBy;
}
else if (ViewState[ORDER_BY] != null)
{
sortColumn = (string)ViewState[ORDER_BY];
}
int colIndex = -1;
if (!String.IsNullOrEmpty(sortColumn))
{
ViewState.Add(ORDER_BY, sortColumn);
TableSchema.TableColumn col = tblSchema.GetColumn(sortColumn);
if (col == null)
{
for (int i = 0; i < tblSchema.Columns.Count; i++)
{
TableSchema.TableColumn fkCol = tblSchema.Columns[i];
if (fkCol.IsForeignKey && !String.IsNullOrEmpty(fkCol.ForeignKeyTableName))
{
TableSchema.Table fkTbl = DataService.GetSchema(fkCol.ForeignKeyTableName, tblSchema.Provider.Name, TableType.Table);
if (fkTbl != null)
{
col = fkTbl.Columns[1];
colIndex = i;
break;
}
}
}
}
if (col != null && col.MaxLength < 2048)
{
if (ViewState[SORT_DIRECTION] == null || ((string)ViewState[SORT_DIRECTION]) == SqlFragment.ASC)
{
if (colIndex > -1)
{
query.OrderBy = OrderBy.Asc(col, SqlFragment.JOIN_PREFIX + colIndex);
}
else
{
query.OrderBy = OrderBy.Asc(col);
}
ViewState[SORT_DIRECTION] = SqlFragment.ASC;
}
else
{
if (colIndex > -1)
{
query.OrderBy = OrderBy.Desc(col, SqlFragment.JOIN_PREFIX + colIndex);
}
else
{
query.OrderBy = OrderBy.Desc(col);
}
ViewState[SORT_DIRECTION] = SqlFragment.DESC;
}
}
}
DataTable dt = query.ExecuteJoinedDataSet().Tables[0];
GridView1.DataSource = dt;
for (int i = 1; i < tblSchema.Columns.Count; i++)
{
BoundField field = (BoundField)GridView1.Columns[i];
field.DataField = dt.Columns[i].ColumnName;
field.SortExpression = dt.Columns[i].ColumnName;
field.HtmlEncode = false;
if (tblSchema.Columns[i].IsForeignKey)
{
TableSchema.Table schema;
if (tblSchema.Columns[i].ForeignKeyTableName == null)
{
schema = DataService.GetForeignKeyTable(tblSchema.Columns[i], tblSchema);
}
else
{
schema = DataService.GetSchema(tblSchema.Columns[i].ForeignKeyTableName, tblSchema.Provider.Name, TableType.Table);
}
if (schema != null)
{
field.HeaderText = schema.DisplayName;
}
}
else
{
field.HeaderText = tblSchema.Columns[i].DisplayName;
}
}
GridView1.DataBind();
}
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
BindGrid(String.Empty);
}
protected void GridView1_DataBound(Object sender, EventArgs e)
{
GridViewRow gvrPager = GridView1.BottomPagerRow;
if (gvrPager == null)
{
return;
}
// get your controls from the gridview
DropDownList ddlPages = (DropDownList)gvrPager.Cells[0].FindControl("ddlPages");
Label lblPageCount = (Label)gvrPager.Cells[0].FindControl("lblPageCount");
if (ddlPages != null)
{
// populate pager
for (int i = 0; i < GridView1.PageCount; i++)
{
int intPageNumber = i + 1;
ListItem lstItem = new ListItem(intPageNumber.ToString());
if (i == GridView1.PageIndex)
{
lstItem.Selected = true;
}
ddlPages.Items.Add(lstItem);
}
}
int itemCount = 0;
// populate page count
if (lblPageCount != null)
{
//pull the datasource
DataSet ds = GridView1.DataSource as DataSet;
if (ds != null)
{
itemCount = ds.Tables[0].Rows.Count;
}
string pageCount = "[<]b[>]" + GridView1.PageCount.ToString() + "[<]/b[>] (" + itemCount.ToString() + " Items)";
lblPageCount.Text = pageCount;
}
Button btnPrev = (Button)gvrPager.Cells[0].FindControl("btnPrev");
Button btnNext = (Button)gvrPager.Cells[0].FindControl("btnNext");
Button btnFirst = (Button)gvrPager.Cells[0].FindControl("btnFirst");
Button btnLast = (Button)gvrPager.Cells[0].FindControl("btnLast");
//now figure out what page we're on
if (GridView1.PageIndex == 0)
{
btnPrev.Enabled = false;
btnFirst.Enabled = false;
}
else if (GridView1.PageIndex + 1 == GridView1.PageCount)
{
btnLast.Enabled = false;
btnNext.Enabled = false;
}
else
{
btnLast.Enabled = true;
btnNext.Enabled = true;
btnPrev.Enabled = true;
btnFirst.Enabled = true;
}
}
protected void ddlPages_SelectedIndexChanged(Object sender, EventArgs e)
{
GridViewRow gvrPager = GridView1.BottomPagerRow;
DropDownList ddlPages = (DropDownList)gvrPager.Cells[0].FindControl("ddlPages");
GridView1.PageIndex = ddlPages.SelectedIndex;
// a method to populate your grid
BindGrid(String.Empty);
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
string columnName = e.SortExpression;
//rebind the grid
if (ViewState[SORT_DIRECTION] == null || ((string)ViewState[SORT_DIRECTION]) == SqlFragment.ASC)
{
ViewState[SORT_DIRECTION] = SqlFragment.DESC;
}
else
{
ViewState[SORT_DIRECTION] = SqlFragment.ASC;
}
BindGrid(columnName);
}
string GetSortDirection(string sortBy)
{
string sortDir = " ASC";
if (ViewState["sortBy"] != null)
{
string sortedBy = ViewState["sortBy"].ToString();
if (sortedBy == sortBy)
{
//the direction should be desc
sortDir = " DESC";
//reset the sorter to null
ViewState["sortBy"] = null;
}
else
{
//this is the first sort for this row
//put it to the ViewState
ViewState["sortBy"] = sortBy;
}
}
else
{
//it's null, so this is the first sort
ViewState["sortBy"] = sortBy;
}
return sortDir;
}
}
}</value>
</data>
<data name="CS_GeneratedScaffoldMarkup" xml:space="preserve">
<value><%@ Page Language="C#" %>
<%@ Import namespace="System.Data"%>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%
string masterPage = "#MASTERPAGE#";
string tableName = "#TABLENAME#";
string className = "#CLASSNAME#";
string generatedClassName = "#PAGEFILE#";
string language = "#LANGUAGE#";
string fileExtension = "#LANGEXTENSION#";
string providerName = "#PROVIDER#";
DataProvider provider = DataService.GetInstance(providerName);
TableSchema.Table tbl = DataService.GetSchema(tableName, provider.Name, TableType.Table);
%>
<%
if (String.IsNullOrEmpty(masterPage))
{
%>
[<]%@ Page Language="C#" Title="<%=className%> Scaffold" CodeFile="<%=generatedClassName%>.aspx<%=fileExtension%>" Inherits="<%=provider.GeneratedNamespace%>.<%=generatedClassName%>" %[>]
[<]!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"[>]
[<]title[>]<%=className%>[<]/title[>]
[<]script language="javascript" type="text/javascript"[>]
function CheckDelete()
{
return confirm('Delete this record? This action cannot be undone...');
}
function imposeMaxLength(e, Object, MaxLen, rowIndex)
{
var keyCode = e.keyCode;
var counter = document.getElementById('counter' + rowIndex);
var charText = Object.value;
var charCount = charText.length;
var charRemain = MaxLen - charCount;
counter.style.visibility = 'visible';
if(keyCode == 8 || keyCode == 46)
{
if(charCount == MaxLen)
{
charRemain = 1;
}
else if(charCount == 0)
{
charRemain = MaxLen;
}
counter.innerHTML = charRemain;
return true;
}
else
{
if(charRemain [>] 0)
{
counter.innerHTML = charRemain;
return true;
}
else
{
Object.value = charText.substring(0, MaxLen);
counter.innerHTML = '0';
return false;
}
}
}
[<]/script[>]
[<]/head[>]
[<]body[>]
[<]form id="elForm" runat="server"[>]
<%
}
else
{
%>
[<]%@ Page Language="<%=language%>" Title="<%=className%> Scaffold" CodeFile="<%=generatedClassName%>.aspx<%=fileExtension%>" Inherits="<%=provider.GeneratedNamespace%>.<%=generatedClassName%>" MasterPageFile="<%= masterPage %>" Theme="default" %[>]
[<]asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="server"[>]
<%
}
%>
[<]h2[>]<%= className %>[<]/h2[>]
[<]asp:Panel id="pnlGrid" runat="server"[>]
[<]asp:GridView
ID="GridView1"
runat="server"
AllowPaging="True"
AllowSorting="True"
AutoGenerateColumns="False"
OnDataBound="GridView1_DataBound"
OnSorting="GridView1_Sorting"
OnPageIndexChanging="GridView1_PageIndexChanging"
DataKeyNames="<%= tbl.PrimaryKey.ColumnName %>"
PageSize="50"
[>]
[<]Columns[>]
[<]asp:HyperLinkField Text="Edit" DataNavigateUrlFields="<%= tbl.PrimaryKey.ColumnName %>" DataNavigateUrlFormatString="<%= generatedClassName %>.aspx?id={0}" /[>]
<%
foreach (TableSchema.TableColumn col in tbl.Columns)
{
if(!col.IsPrimaryKey)
{
%>
[<]asp:BoundField DataField="<%=col.ColumnName%>" HeaderText="<%=col.DisplayName%>" SortExpression="<%=col.ColumnName%>"[>][<]/asp:BoundField[>]
<%
}
}
%>
[<]/Columns[>]
[<]EmptyDataTemplate[>]
No <%= tbl.ClassNamePlural %>
[<]/EmptyDataTemplate[>]
[<]PagerTemplate[>]
[<]div style="border-top:1px solid #666666"[>]
[<]br /[>]
[<]asp:Button ID="btnFirst" runat="server" CssClass="scaffoldButton" Text="[<][<] First" CommandArgument="First" CommandName="Page"/[>]
[<]asp:Button ID="btnPrev" runat="server" CssClass="scaffoldButton" Text="[<] Previous" CommandArgument="Prev" CommandName="Page"/[>]
Page
[<]asp:DropDownList ID="ddlPages" runat="server" CssClass="scaffoldEditItem" AutoPostBack="True" OnSelectedIndexChanged="ddlPages_SelectedIndexChanged"[>]
[<]/asp:DropDownList[>] of [<]asp:Label ID="lblPageCount" runat="server"[>][<]/asp:Label[>]
[<]asp:Button ID="btnNext" runat="server" CssClass="scaffoldButton" Text="Next [>]" CommandArgument="Next" CommandName="Page"/[>]
[<]asp:Button ID="btnLast" runat="server" CssClass="scaffoldButton" Text="Last [>][>]" CommandArgument="Last" CommandName="Page"/[>]
[<]/PagerTemplate[>]
[<]/asp:GridView[>]
[<]a href="<%= generatedClassName %>.aspx?id=0"[>]Add New...[<]/a[>]
[<]/asp:Panel[>]
[<]asp:panel id="pnlEdit" Runat="server"[>]
[<]asp:Label ID="lblResult" runat="server"[>][<]/asp:Label[>]
[<]table class="scaffoldEditTable" cellpadding="5" cellspacing="0" Width="600px"[>]
[<]tr[>]
[<]td class="scaffoldEditItemCaption"[>]<%= tbl.PrimaryKey.DisplayName %>[<]/td[>]
[<]td class="scaffoldEditItem"[>][<]asp:Label id="lblID" runat="server" /[>][<]/td[>]
[<]/tr[>]
<%
foreach (TableSchema.TableColumn col in tbl.Columns)
{
if(!col.IsPrimaryKey)
{
%>
[<]tr[>]
[<]td class="scaffoldEditItemCaption"[>]<%=col.DisplayName%>[<]/td[>]
<%
string controlID = "ctrl" + col.PropertyName;
string displayPrefix = String.Empty;
string controlType;
string controlProperties = String.Empty;
bool isTextBox = false;
if(col.IsForeignKey)
{
controlType = "DropDownList";
}
else
{
switch(col.DataType)
{
case DbType.Binary:
case DbType.Byte:
controlType = String.Empty;
break;
case DbType.Guid:
case DbType.AnsiString:
case DbType.String:
case DbType.StringFixedLength:
case DbType.Xml:
case DbType.Object:
case DbType.AnsiStringFixedLength:
if(Utility.IsMatch(col.ColumnName, ReservedColumnName.CREATED_BY) || Utility.IsMatch(col.ColumnName, ReservedColumnName.MODIFIED_BY))
{
controlType = "Label";
}
else
{
isTextBox = true;
controlType = "TextBox";
if(col.MaxLength > 250)
{
controlProperties += "TextMode=\"MultiLine\" ";
controlProperties += "Height=\"100px\" ";
controlProperties += "Width=\"500px\" ";
}
}
break;
case DbType.Date:
case DbType.Time:
case DbType.DateTime:
if(Utility.IsMatch(col.ColumnName, ReservedColumnName.MODIFIED_ON) || Utility.IsMatch(col.ColumnName, ReservedColumnName.CREATED_ON))
{
controlType = "Label";
}
else
{
controlType = "Calendar";
}
break;
case DbType.Int16:
case DbType.Int32:
case DbType.UInt16:
case DbType.Int64:
case DbType.UInt32:
case DbType.UInt64:
case DbType.VarNumeric:
case DbType.Single:
case DbType.Currency:
case DbType.Decimal:
case DbType.Double:
isTextBox = true;
controlType = "TextBox";
controlProperties += "Width=\"50px\" ";
if(col.DataType == DbType.Currency)
{
displayPrefix = "$";
}
break;
case DbType.Boolean:
bool isChecked = false;
if(Utility.IsMatch(col.ColumnName, ReservedColumnName.IS_ACTIVE))
{
isChecked = true;
}
controlType = "CheckBox";
controlProperties += "Checked=\"" + isChecked + "\" ";
break;
default:
isTextBox = true;
controlType = "TextBox";
break;
}
}
if(isTextBox && col.MaxLength > 0)
{
controlProperties += "MaxLength=\"" + col.MaxLength + "\" ";
}
string controlMarkup = String.Empty;
if(!String.IsNullOrEmpty(controlType))
{
controlMarkup = displayPrefix + "<asp:" + controlType + " ID=\"" + controlID + "\" runat=\"server\" " + controlProperties + "></asp:" + controlType + ">";
}
%>
[<]td class="scaffoldEditItem"[>]<%=controlMarkup%>[<]/td[>]
[<]/tr[>]
<%
}
}
%>
[<]tr[>]
[<]td colspan="2" align="left"[>]
[<]asp:Button id="btnSave" CssClass="scaffoldButton" runat="server" Text="Save" OnClick="btnSave_Click"[>][<]/asp:Button[>]&nbsp;
[<]input type="button" onclick="location.href='<%= generatedClassName %>.aspx'" class="scaffoldButton" value="Return" /[>]
[<]asp:Button id="btnDelete" CssClass="scaffoldButton" runat="server" CausesValidation="False" Text="Delete" OnClick="btnDelete_Click"[>][<]/asp:Button[>][<]/td[>]
[<]/tr[>]
[<]/table[>]
[<]/asp:panel[>]
<%if(String.IsNullOrEmpty(masterPage))
{
%>
[<]/form[>]
[<]/body[>]
[<]/html[>]
<%
}
else
{
%>
[<]/asp:Content[>]
<%
}
%></value>
</data>
<data name="CS_ODSController" xml:space="preserve">
<value><%@ Page Language="C#" %>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%
//The data we need
string providerName = "#PROVIDER#";
string tableName = "#TABLE#";
TableSchema.Table tbl = DataService.GetSchema(tableName, providerName, TableType.Table);
DataProvider provider = DataService.Providers[providerName];
LanguageType lang = LanguageType.CSharp;
//The main vars we need
TableSchema.TableColumnCollection cols = tbl.Columns;
%>
//Generated on <%=DateTime.Now.ToString() %> by <%=Environment.UserName %>
namespace <%=provider.GeneratedNamespace %>
{
/// <summary>
/// Controller class for <%=tbl.Name %>
/// </summary>
[System.ComponentModel.DataObject]
public partial class <%=tbl.ClassName %>Controller
{
// Preload our schema..
<%=tbl.ClassName%> thisSchemaLoad = new <%=tbl.ClassName%>();
private string userName = string.Empty;
protected string UserName
{
get
{
if (userName.Length == 0)
{
if (System.Web.HttpContext.Current != null)
{
userName=System.Web.HttpContext.Current.User.Identity.Name;
}
else
{
userName=System.Threading.Thread.CurrentPrincipal.Identity.Name;
}
}
return userName;
}
}
[DataObjectMethod(DataObjectMethodType.Select, true)]
public <%=tbl.ClassName%>Collection FetchAll()
{
<%=tbl.ClassName%>Collection coll = new <%=tbl.ClassName%>Collection();
Query qry = new Query(<%=tbl.ClassName%>.Schema);
coll.Load(qry.ExecuteReader());
return coll;
}
[DataObjectMethod(DataObjectMethodType.Select, false)]
public <%=tbl.ClassName%>Collection FetchByID(object <%=tbl.PrimaryKey.PropertyName%>)
{
<%=tbl.ClassName%>Collection coll = new <%=tbl.ClassName%>Collection().Where("<%=tbl.PrimaryKey.ColumnName %>", <%=tbl.PrimaryKey.PropertyName%>).Load();
return coll;
}
[DataObjectMethod(DataObjectMethodType.Select, false)]
public <%=tbl.ClassName%>Collection FetchByQuery(Query qry)
{
<%=tbl.ClassName%>Collection coll = new <%=tbl.ClassName%>Collection();
coll.Load(qry.ExecuteReader());
return coll;
}
[DataObjectMethod(DataObjectMethodType.Delete, true)]
public bool Delete(object <%=tbl.PrimaryKey.PropertyName%>)
{
return (<%=tbl.ClassName%>.Delete(<%=tbl.PrimaryKey.PropertyName%>) == 1);
}
[DataObjectMethod(DataObjectMethodType.Delete, false)]
public bool Destroy(object <%=tbl.PrimaryKey.PropertyName%>)
{
return (<%=tbl.ClassName%>.Destroy(<%=tbl.PrimaryKey.PropertyName%>) == 1);
}
<%
string insertArgs = string.Empty;
string updateArgs = string.Empty;
string seperator = ",";
foreach (TableSchema.TableColumn col in cols)
{
string propName = col.PropertyName;
string varType = Utility.GetVariableType(col.DataType, col.IsNullable, lang);
updateArgs += varType + " " + propName + seperator;
if (!col.AutoIncrement)
{
insertArgs += varType + " " + propName + seperator;
}
}
if (insertArgs.Length > 0)
insertArgs = insertArgs.Remove(insertArgs.Length - seperator.Length, seperator.Length);
if (updateArgs.Length > 0)
updateArgs = updateArgs.Remove(updateArgs.Length - seperator.Length, seperator.Length);
%>
/// <summary>
/// Inserts a record, can be used with the Object Data Source
/// </summary>
[DataObjectMethod(DataObjectMethodType.Insert, true)]
public void Insert(<%=insertArgs%>)
{
<%=tbl.ClassName %> item = new <%= tbl.ClassName %>();
<%
foreach (TableSchema.TableColumn col in cols) {
if (!col.AutoIncrement) {
%>
item.<%=col.PropertyName%> = <%=col.PropertyName%>;
<%
}
}
%>
item.Save(UserName);
}
/// <summary>
/// Updates a record, can be used with the Object Data Source
/// </summary>
[DataObjectMethod(DataObjectMethodType.Update, true)]
public void Update(<%=updateArgs%>)
{
<%=tbl.ClassName%> item = new <%=tbl.ClassName %>();
<%
foreach (TableSchema.TableColumn col in cols)
{
%>
item.<%=col.PropertyName%> = <%=col.PropertyName%>;
<%
}
%>
item.MarkOld();
item.Save(UserName);
}
}
}</value>
</data>
<data name="CS_SPTemplate" xml:space="preserve">
<value><%@ Page Language="C#"%>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%@ Import Namespace="SubSonic.CodeGenerator" %>
<%@ Import Namespace="System.Data" %>
<%
string providerName = "#PROVIDER#";
LanguageType lang = LanguageType.CSharp;
DataProvider provider = DataService.GetInstance(providerName);
System.Collections.Generic.List<StoredProcedure> spList = DataService.GetSPSchemaCollection(providerName) ;
ArrayList classStoredProcedures = new ArrayList();
%>
namespace <%=provider.GeneratedNamespace %>{
public partial class <%=provider.SPClassName%>{
<%foreach (StoredProcedure sp in spList)
{
if(Utility.IsMatch(sp.TableName, provider.SPClassName))
{
//load up a the params
string argList = string.Empty;
bool isFirst = true;
foreach(StoredProcedure.Parameter p in sp.Parameters)
{
if(!isFirst)
{
argList += ", ";
}
isFirst = false;
string pType = Utility.GetVariableType(p.DBType, lang);
string arg = p.DisplayName;
argList += pType + " " + arg;
}
%>
/// <summary>
/// Creates an object wrapper for the <%=sp.Name%> Procedure
/// </summary>
public static StoredProcedure <%=sp.DisplayName%>(<%=argList%>)
{
SubSonic.StoredProcedure sp = new SubSonic.StoredProcedure("<%=sp.Name%>" , DataService.GetInstance("<%= providerName %>"));
<%
foreach(StoredProcedure.Parameter p in sp.Parameters)
{
if(p.Mode == ParameterDirection.InputOutput)
{%>
sp.Command.AddOutputParameter("<%=p.QueryParameter%>",DbType.<%=Enum.GetName(typeof(DbType), p.DBType)%>);
<%
}
else
{%>
sp.Command.AddParameter("<%=p.QueryParameter%>", <%=p.DisplayName%>,DbType.<%=Enum.GetName(typeof(DbType), p.DBType)%>);
<%
}
}
%>
return sp;
}
<%
}
else
{
classStoredProcedures.Add(sp);
}
}
%>
}
<%
foreach (StoredProcedure sp in classStoredProcedures)
{
string className = sp.TableName;
TableSchema.Table tbl = DataService.GetTableSchema(sp.TableName, provider.Name, TableType.Table);
if(tbl != null)
{
className = tbl.ClassName;
}
string argList = string.Empty;
bool isFirst = true;
foreach(StoredProcedure.Parameter p in sp.Parameters)
{
if(!isFirst)
{
argList += ", ";
}
isFirst = false;
string pType = Utility.GetVariableType(p.DBType, lang);
string arg = p.DisplayName;
argList += pType + " " + arg;
}
%>
public partial class <%=className%>
{
/// <summary>
/// Creates an object wrapper for the <%=sp.Name%> Procedure
/// </summary>
public static StoredProcedure <%=sp.DisplayName%>(<%=argList%>){
SubSonic.StoredProcedure sp = new SubSonic.StoredProcedure("<%=sp.Name%>" , DataService.GetInstance("<%= providerName %>"));
<%
foreach(StoredProcedure.Parameter p in sp.Parameters)
{%>
<%
if(p.Mode == ParameterDirection.InputOutput)
{%>
sp.Command.AddOutputParameter("<%=p.QueryParameter%>",DbType.<%=Enum.GetName(typeof(DbType), p.DBType)%>);
<%
}
else
{%>
sp.Command.AddParameter("<%=p.QueryParameter%>", <%=p.DisplayName%>,DbType.<%=Enum.GetName(typeof(DbType), p.DBType)%>);
<%
}%>
<%
}%>
return sp;
}
}
<%
}
%>
}</value>
</data>
<data name="CS_StructsTemplate" xml:space="preserve">
<value><%@ Page Language="C#"%>
<%@ Import Namespace="SubSonic" %>
<%@ Import Namespace="SubSonic.CodeGenerator" %>
<%@ Import Namespace="System.Data" %>
<%foreach(DataProvider p in DataService.Providers){
TableSchema.Table[] tables = DataService.GetTables(p.Name);
TableSchema.Table[] views = DataService.GetViews(p.Name);
%>
namespace <%=p.GeneratedNamespace%>
{
#region Tables Struct
public partial struct Tables
{
<%
foreach (TableSchema.Table t in tables)
{
if(CodeService.ShouldGenerate(t.Name, p.Name))
{
%>
public static string <%= t.ClassName %> = @"<%= t.ClassName %>";
<%
}
}
%>
}
#endregion
#region View Struct
public partial struct Views
{
<%
foreach (TableSchema.Table v in views)
{
if (CodeService.ShouldGenerate(v.Name, p.Name))
{
%>
public static string <%= v.ClassName %> = @"<%= v.ClassName %>";
<%
}
}
%>
}
#endregion
}
<%} %>
#region Databases
public partial struct Databases
{
<%foreach (DataProvider p in DataService.Providers) { %>
public static string <%= p.Name %> = @"<%= p.Name%>";
<%}%>
}
#endregion</value>
</data>
<data name="CS_ViewTemplate" xml:space="preserve">
<value><%@ Page Language="C#"%>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%
string providerName = "#PROVIDER#";
string viewName = "#VIEW#";
//The data we need
TableSchema.Table view = DataService.GetSchema(viewName, providerName, TableType.View);
LanguageType lang = LanguageType.CSharp;
//The main vars we need
TableSchema.TableColumnCollection cols = view.Columns;
string className = view.ClassName;
string nSpace = DataService.Providers[providerName].GeneratedNamespace;
%>
namespace <%=nSpace %>{
/// <summary>
/// Strongly-typed collection for the <%=className%> class.
/// </summary>
[Serializable]
public partial class <%=className%>Collection : ReadOnlyList[<]<%= className %>[>]
{
List[<]Where[>] wheres = new List[<]Where[>]();
List[<]BetweenAnd[>] betweens = new List[<]BetweenAnd[>]();
SubSonic.OrderBy orderBy;
public <%=className%>Collection OrderByAsc(string columnName)
{
this.orderBy = SubSonic.OrderBy.Asc(columnName);
return this;
}
public <%=className%>Collection OrderByDesc(string columnName)
{
this.orderBy = SubSonic.OrderBy.Desc(columnName);
return this;
}
public <%=className%>Collection WhereDatesBetween(string columnName, DateTime dateStart, DateTime dateEnd)
{
return BetweenAnd(columnName, dateStart, dateEnd);
}
public <%=className%>Collection Where(Where where)
{
wheres.Add(where);
return this;
}
public <%=className%>Collection Where(string columnName, object value)
{
if(value != DBNull.Value && value != null)
{
return Where(columnName, Comparison.Equals, value);
}
else
{
return Where(columnName, Comparison.Is, DBNull.Value);
}
}
public <%=className%>Collection Where(string columnName, Comparison comp, object value)
{
Where where = new Where();
where.ColumnName = columnName;
where.Comparison = comp;
where.ParameterValue = value;
Where(where);
return this;
}
public <%=className%>Collection BetweenAnd(string columnName, DateTime dateStart, DateTime dateEnd)
{
BetweenAnd between = new BetweenAnd();
between.ColumnName = columnName;
between.StartDate = dateStart;
between.EndDate = dateEnd;
between.StartParameterName = "start" + columnName;
between.EndParameterName = "end" + columnName;
betweens.Add(between);
return this;
}
public <%=className%>Collection Load()
{
Query qry = new Query(<%=className%>.Schema);
CheckLogicalDelete(qry);
foreach (Where where in wheres)
{
qry.AddWhere(where);
}
foreach (BetweenAnd between in betweens)
{
qry.AddBetweenAnd(between);
}
if (orderBy != null)
{
qry.OrderBy = orderBy;
}
IDataReader rdr = qry.ExecuteReader();
this.Load(rdr);
rdr.Close();
return this;
}
public <%=className%>Collection()
{
}
}
/// <summary>
/// This is Read-only wrapper class for the <%=viewName%> view.
/// </summary>
[Serializable]
public partial class <%=className%> : ReadOnlyRecord[<]<%= className %>[>]
{
#region Default Settings
protected static void SetSQLProps()
{
GetTableSchema();
}
#endregion
#region Schema Accessor
public static TableSchema.Table Schema
{
get
{
if (BaseSchema == null)
{
SetSQLProps();
}
return BaseSchema;
}
}
private static void GetTableSchema()
{
if(!IsSchemaInitialized)
{
//Schema declaration
TableSchema.Table schema = new TableSchema.Table("<%=viewName%>", TableType.View, DataService.GetInstance("<%=providerName %>"));
schema.Columns = new TableSchema.TableColumnCollection();
schema.SchemaName = "<%=view.SchemaName%>";
//columns
<%
foreach(TableSchema.TableColumn col in cols)
{
string varName = "col" + col.ArgumentName;
%>
TableSchema.TableColumn <%=varName %> = new TableSchema.TableColumn(schema);
<%=varName %>.ColumnName = "<%= col.ColumnName %>";
<%=varName %>.DataType = DbType.<%=col.DataType %>;
<%=varName %>.MaxLength = <%=col.MaxLength %>;
<%=varName %>.AutoIncrement = false;
<%=varName %>.IsNullable = <%=col.IsNullable.ToString().ToLower()%>;
<%=varName %>.IsPrimaryKey = false;
<%=varName %>.IsForeignKey = false;
<%=varName %>.IsReadOnly = <%= col.IsReadOnly.ToString().ToLower() %>;
<%
if(col.IsForeignKey)
{
%>
<%=varName %>.ForeignKeyTableName = "<%= col.ForeignKeyTableName %>";
<% } %>
schema.Columns.Add(<%=varName%>);
<%
}
%>
BaseSchema = schema;
//add this schema to the provider
//so we can query it later
DataService.Providers["<%=providerName %>"].AddSchema("<%=viewName%>",schema);
}
}
#endregion
#region Query Accessor
public static Query CreateQuery()
{
return new Query(Schema);
}
#endregion
#region .ctors
public <%=className %>()
{
SetSQLProps();
SetDefaults();
MarkNew();
}
public <%=className %>(object keyID)
{
SetSQLProps();
LoadByKey(keyID);
}
public <%=className %>(string columnName, object columnValue)
{
SetSQLProps();
LoadByParam(columnName,columnValue);
}
#endregion
#region Props
<%
foreach(TableSchema.TableColumn col in cols){
string propName = col.PropertyName;
string varType = Utility.GetVariableType(col.DataType, col.IsNullable, lang);
%>
[XmlAttribute("<%=propName%>")]
public <%=varType%> <%=propName%>
{
get
{
return GetColumnValue[<]<%= varType %>[>]("<%=propName%>");
}
set
{
MarkDirty();
SetColumnValue("<%=propName%>", value);
}
}
<%
}
%>
#endregion
#region Columns Struct
public struct Columns
{
<%
foreach (TableSchema.TableColumn col in cols) {
string propName = col.PropertyName;
%>
public static string <%=propName%> = @"<%=propName%>";
<%
}
%>
}
#endregion
}
}</value>
</data>
<data name="VB_ClassTemplate" xml:space="preserve">
<value><%@ Page Language="C#" %>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%
//The data we need
string providerName = "#PROVIDER#";
string tableName = "#TABLE#";
TableSchema.Table tbl = DataService.GetSchema(tableName, providerName, TableType.Table);
DataProvider provider = DataService.Providers[providerName];
LanguageType lang = LanguageType.VB;
//The main vars we need
TableSchema.TableColumnCollection cols = tbl.Columns;
string className = tbl.ClassName;
string thisPK = tbl.PrimaryKey.PropertyName;
string varPK = tbl.PrimaryKey.ArgumentName;
string varPKType = Utility.GetVariableType(tbl.PrimaryKey.DataType, tbl.PrimaryKey.IsNullable, lang);
%>
'Generated on <%=DateTime.Now.ToString() %> by <%=Environment.UserName %>
Namespace <%=provider.GeneratedNamespace %>
''' <summary>
''' Strongly-typed collection for the <%=className%> class.
''' </summary>
<Serializable> _
Public Partial Class <%=className%>Collection
Inherits ActiveList(Of <%=className%>)
Private wheres As List(Of Where) = New List(Of Where)()
Private betweens As List(Of BetweenAnd) = New List(Of BetweenAnd)()
Private orderBy As SubSonic.OrderBy
Public Function OrderByAsc(ByVal columnName As String) As <%=className%>Collection
Me.orderBy = SubSonic.OrderBy.Asc(columnName)
Return Me
End Function
Public Function OrderByDesc(ByVal columnName As String) As <%=className%>Collection
Me.orderBy = SubSonic.OrderBy.Desc(columnName)
Return Me
End Function
Public Function WhereDatesBetween(ByVal columnName As String, ByVal dateStart As DateTime, ByVal dateEnd As DateTime) As <%=className%>Collection
Return BetweenAnd(columnName, dateStart, dateEnd)
End Function
Public Function Where(ByVal varWhere As Where) As <%=className%>Collection
wheres.Add(varWhere)
Return Me
End Function
Public Function Where(ByVal columnName As String, ByVal value As Object) As <%=className%>Collection
If Not value Is DBNull.Value AndAlso Not value Is Nothing Then
Return Where(columnName, Comparison.Equals, value)
Else
Return Where(columnName, Comparison.Is, DBNull.Value)
End If
End Function
Public Function Where(ByVal columnName As String, ByVal comp As Comparison, ByVal value As Object) As <%=className%>Collection
Dim _where As Where = New Where()
_where.ColumnName = columnName
_where.Comparison = comp
_where.ParameterValue = value
Me.Where(_where)
Return Me
End Function
Public Function BetweenAnd(ByVal columnName As String, ByVal dateStart As DateTime, ByVal dateEnd As DateTime) As <%=className%>Collection
Dim between As BetweenAnd = New BetweenAnd()
between.ColumnName = columnName
between.StartDate = dateStart
between.EndDate = dateEnd
between.StartParameterName = "start" + columnName
between.EndParameterName = "end" + columnName
betweens.Add(between)
Return Me
End Function
Public Overloads Function Load() As <%=className%>Collection
Dim qry As Query = New Query(<%=className%>.Schema)
CheckLogicalDelete(qry)
For Each where As Where In wheres
qry.AddWhere(where)
Next where
For Each between As BetweenAnd In betweens
qry.AddBetweenAnd(between)
Next between
If Not orderBy Is Nothing Then
qry.OrderBy = orderBy
End If
Dim rdr As IDataReader = qry.ExecuteReader()
MyBase.Load(rdr)
rdr.Close()
Return Me
End Function
Public Sub New()
End Sub
End Class
''' <summary>
''' This is an ActiveRecord class which wraps the <%=tableName%> table.
''' </summary>
<Serializable> _
Public Partial Class <%=className%>
Inherits ActiveRecord(Of <%=className%>)
#Region "Default Settings"
Protected Shared Sub SetSQLProps()
GetTableSchema()
End Sub
#End Region
#Region "Schema Accessor"
Public Shared ReadOnly Property Schema() As TableSchema.Table
Get
If BaseSchema Is Nothing Then
SetSQLProps()
End If
Return BaseSchema
End Get
End Property
Private Shared Sub GetTableSchema()
If (Not IsSchemaInitialized) Then
'Schema declaration
Dim schema As TableSchema.Table = New TableSchema.Table("<%=tableName%>", TableType.Table, DataService.GetInstance("<%=providerName%>"))
schema.Columns = New TableSchema.TableColumnCollection()
schema.SchemaName = "<%=tbl.SchemaName %>"
'columns
<%
foreach(TableSchema.TableColumn col in cols)
{
string varName = "col" + col.ArgumentName;
%>
Dim <%=varName %> As TableSchema.TableColumn = New TableSchema.TableColumn(schema)
<%=varName %>.ColumnName = "<%=col.ColumnName%>"
<%=varName %>.DataType = DbType.<%=col.DataType %>
<%=varName %>.MaxLength = <%=col.MaxLength %>
<%=varName %>.AutoIncrement = <%=col.AutoIncrement.ToString().ToLower() %>
<%=varName %>.IsNullable = <%=col.IsNullable.ToString().ToLower()%>
<%=varName %>.IsPrimaryKey = <%=col.IsPrimaryKey.ToString().ToLower()%>
<%=varName %>.IsForeignKey = <%=col.IsForeignKey.ToString().ToLower()%>
<%=varName %>.IsReadOnly = <%= col.IsReadOnly.ToString().ToLower() %>
<% if (!String.IsNullOrEmpty(col.DefaultSetting))
{
%>
<%=varName%>.DefaultSetting = "<%= col.DefaultSetting%>"
<%
}
%>
<%
if(col.IsForeignKey)
{
%>
<%=varName %>.ForeignKeyTableName = "<%= col.ForeignKeyTableName %>"
<% } %>
schema.Columns.Add(<%=varName%>)
<%
}
%>
BaseSchema = schema
'add this schema to the provider
'so we can query it later
DataService.Providers("<%=providerName %>").AddSchema("<%=tableName%>",schema)
End If
End Sub
#End Region
#Region "Query Accessor"
Public Shared Function CreateQuery() As Query
Return New Query(Schema)
End Function
#End Region
#Region ".ctors"
Public Sub New()
SetSQLProps()
SetDefaults()
MarkNew()
End Sub
Public Sub New(ByVal keyID As Object)
SetSQLProps()
SetDefaults()
LoadByKey(keyID)
End Sub
Public Sub New(ByVal columnName As String, ByVal columnValue As Object)
SetSQLProps()
SetDefaults()
LoadByParam(columnName,columnValue)
End Sub
#End Region
#Region "Props"
<%
foreach(TableSchema.TableColumn col in cols){
string propName = col.PropertyName;
string varType = Utility.GetVariableType(col.DataType, col.IsNullable, lang);
%>
<XmlAttribute("<%=propName%>")> _
Public Property <%=propName%> As <%=varType%>
Get
Return GetColumnValue(Of <%= varType %>)("<%=col.ColumnName%>")
End Get
Set
MarkDirty()
SetColumnValue("<%=col.ColumnName%>", Value)
End Set
End Property
<%
}
%>
#End Region
<%if (tbl.PrimaryKeyTables.Count > 0)
{%>
#Region "PrimaryKey Methods"
<%
TableSchema.PrimaryKeyTableCollection pkTables = tbl.PrimaryKeyTables;
if(pkTables != null)
{
ArrayList usedMethodNames = new ArrayList();
foreach(TableSchema.PrimaryKeyTable pk in pkTables)
{
TableSchema.Table pkTbl = DataService.GetSchema(pk.TableName, providerName, TableType.Table);
if(pkTbl.PrimaryKey != null)
{
string pkClass = pk.ClassName;
string pkClassQualified = provider.GeneratedNamespace + "." + pkClass;
string pkMethod = pk.ClassNamePlural;
string pkColumn = pk.PropertyName;
if(Utility.IsMatch(pkClass, pkMethod))
{
pkMethod += "Records";
}
if(pk.ClassName == className)
{
pkMethod = "Child" + pkMethod;
}
if(usedMethodNames.Contains(pkMethod))
{
pkMethod += "From" + className;
if(usedMethodNames.Contains(pkMethod))
{
pkMethod += pkColumn;
}
}
usedMethodNames.Add(pkMethod);
if(!String.IsNullOrEmpty(provider.RelatedTableLoadPrefix))
{
pkMethod = provider.RelatedTableLoadPrefix + pkMethod;
}
bool methodsNoLazyLoad = !provider.GenerateRelatedTablesAsProperties && !provider.GenerateLazyLoads;
bool methodsLazyLoad = !provider.GenerateRelatedTablesAsProperties && provider.GenerateLazyLoads;
bool propertiesNoLazyLoad = provider.GenerateRelatedTablesAsProperties && !provider.GenerateLazyLoads;
bool propertiesLazyLoad = provider.GenerateRelatedTablesAsProperties && provider.GenerateLazyLoads;
if(methodsNoLazyLoad)
{
%>
Public Function <%=pkMethod%>() As <%=pkClassQualified%>Collection
Return New <%=pkClassQualified%>Collection().Where(<%=pkTbl.ClassName%>.Columns.<%=pkColumn%>, <%=tbl.PrimaryKey.PropertyName%>).Load()
End Function
<%
}
else if(methodsLazyLoad)
{
%>
Dim col<%=pkMethod%> As <%=pkClassQualified%>Collection
Public Function <%=pkMethod%>() As <%=pkClassQualified%>Collection
If(col<%=pkMethod%> Is Nothing)
col<%=pkMethod%> = New <%=pkClassQualified%>Collection().Where(<%=pkTbl.ClassName%>.Columns.<%=pkColumn%>, <%=tbl.PrimaryKey.PropertyName%>).Load()
End If
Return col<%=pkMethod%>
End Function
<%
}
else if(propertiesNoLazyLoad)
{
%>
Public ReadOnly Property <%=pkMethod%>() As <%=pkClassQualified%>Collection
Get
Return New <%=pkClassQualified%>Collection().Where(<%=pkTbl.ClassName%>.Columns.<%=pkColumn%>, <%=tbl.PrimaryKey.PropertyName%>).Load()
End Get
End Property
<%
}
else if(propertiesLazyLoad)
{
%>
Dim col<%=pkMethod%> As <%=pkClassQualified%>Collection
Public ReadOnly Property <%=pkMethod%>() As <%=pk.ClassName%>Collection
Get
If(col<%=pkMethod%> Is Nothing)
col<%=pkMethod%> = New <%=pkClassQualified%>Collection().Where(<%=pkTbl.ClassName%>.Columns.<%=pkColumn%>, <%=tbl.PrimaryKey.PropertyName%>).Load()
End If
Return col<%=pkMethod%>
End Get
End Property
<%
}
}
}
}
%>
#End Region
<%
}
%>
<%if (tbl.ForeignKeys.Count > 0) { %>
#Region "ForeignKey Methods"
<%
TableSchema.ForeignKeyTableCollection fkTables = tbl.ForeignKeys;
if (fkTables != null)
{
ArrayList usedPropertyNames = new ArrayList();
foreach (TableSchema.ForeignKeyTable fk in tbl.ForeignKeys)
{
TableSchema.Table fkTbl = DataService.GetSchema(fk.TableName, providerName, TableType.Table);
string fkClass = fk.ClassName;
string fkClassQualified = provider.GeneratedNamespace + "." + fkClass;
string fkMethod = fk.ClassName;
string fkID = fk.PropertyName;
//it's possible this table is "relatin to itself"
//check to make sure the class names are not the same
//if they are, use the fk columnName
if (fk.ClassName == className)
{
fkMethod = "Parent" + fk.ClassName;
}
if (usedPropertyNames.Contains(fk.ClassName))
{
fkMethod += "To" + fkID;
}
if (tbl.GetColumn(fkMethod) != null)
{
fkMethod += "Record";
}
%>
''' <summary>
''' Returns a <%=fkClass%> ActiveRecord object related to this <%=className%>
''' </summary>
Public Property <%=fkMethod%>() As <%=fkClassQualified%>
Get
Return <%=fkClassQualified%>.FetchByID(Me.<%=fkID%>)
End Get
Set
MarkDirty()
SetColumnValue("<%=fkID%>", Value.<%=fkTbl.PrimaryKey.PropertyName%>)
End Set
End Property
<%
usedPropertyNames.Add(fk.ClassName);
}
}
%>
#End Region
<%} else {%>
'no foreign key tables defined (<%=tbl.ForeignKeys.Count.ToString() %>)
<%} %>
<%if (tbl.ManyToManys.Count > 0) { %>
#Region "Many To Many Helpers"
<%
TableSchema.ManyToManyRelationshipCollection mm = tbl.ManyToManys;
if (mm != null)
{
ArrayList usedConstraints = new ArrayList();
foreach (TableSchema.ManyToManyRelationship m in mm)
{
if (!usedConstraints.Contains(m.ForeignTableClassName))
{
usedConstraints.Add(m.ForeignTableClassName);
string fkClass = m.ForeignTableClassName;
string fkClassQualified = provider.GeneratedNamespace + "." + fkClass;
%>
Public Function Get<%=fkClass%>Collection() As <%=fkClassQualified%>Collection
Return <%=className%>.Get<%=fkClass%>Collection(Me.<%=thisPK%>)
End Function
Public Shared Function Get<%=fkClass%>Collection(ByVal <%= varPK%> As <%= varPKType%>) As <%=fkClassQualified%>Collection
Dim cmd As SubSonic.QueryCommand = New SubSonic.QueryCommand("SELECT * FROM <%=m.ForeignTableName%> INNER JOIN <%=m.MapTableName%> ON <%=m.ForeignTableName%>.<%=m.ForeignPrimaryKey%>=<%=m.MapTableName%>.<%=m.MapTableForeignTableKeyColumn%> WHERE <%=m.MapTableName%>.<%=m.MapTableLocalTableKeyColumn%>=@<%=m.MapTableLocalTableKeyColumn%>", <%=className%>.Schema.Provider.Name)
cmd.AddParameter("@<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>)
Dim rdr As IDataReader = SubSonic.DataService.GetReader(cmd)
Dim coll As <%=fkClass%>Collection = New <%=fkClass%>Collection()
coll.LoadAndCloseReader(rdr)
Return coll
End Function
Public Shared Sub Save<%=fkClass%>Map(ByVal <%= varPK%> As <%= varPKType%>, ByVal items As <%=fkClass%>Collection)
Dim coll As QueryCommandCollection = New SubSonic.QueryCommandCollection()
'delete out the existing
Dim cmdDel As QueryCommand = New QueryCommand("DELETE FROM <%=m.MapTableName%> WHERE <%=m.MapTableLocalTableKeyColumn%>=@<%=m.MapTableLocalTableKeyColumn%>", <%=className%>.Schema.Provider.Name)
cmdDel.AddParameter("@<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>)
'add this in
coll.Add(cmdDel)
DataService.ExecuteTransaction(coll)
For Each item As <%=fkClass%> In items
Dim var<%=m.ClassName%> As <%=m.ClassName%> = New <%= m.ClassName%>()
var<%=m.ClassName%>.SetColumnValue("<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>)
var<%=m.ClassName%>.SetColumnValue("<%=m.MapTableForeignTableKeyColumn%>", item.GetPrimaryKeyValue())
var<%=m.ClassName%>.Save()
Next
End Sub
Public Shared Sub Save<%=fkClass%>Map(ByVal <%= varPK%> As <%= varPKType%>, ByVal itemList As System.Web.UI.WebControls.ListItemCollection)
Dim coll As QueryCommandCollection = New SubSonic.QueryCommandCollection()
'delete out the existing
Dim cmdDel As QueryCommand = New QueryCommand("DELETE FROM <%=m.MapTableName%> WHERE <%=m.MapTableLocalTableKeyColumn%>=@<%=m.MapTableLocalTableKeyColumn%>", <%=className%>.Schema.Provider.Name)
cmdDel.AddParameter("@<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>)
'add this in
coll.Add(cmdDel)
DataService.ExecuteTransaction(coll)
For Each l As System.Web.UI.WebControls.ListItem In itemList
If l.Selected
Dim var<%=m.ClassName%> As <%=m.ClassName%> = New <%= m.ClassName%>()
var<%=m.ClassName%>.SetColumnValue("<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>)
var<%=m.ClassName%>.SetColumnValue("<%=m.MapTableForeignTableKeyColumn%>", l.Value)
var<%=m.ClassName%>.Save()
End If
Next
End Sub
Public Shared Sub Save<%=fkClass%>Map(ByVal <%= varPK%> As <%= varPKType%>, ByVal itemList() As <%= varPKType%>)
Dim coll As QueryCommandCollection = New SubSonic.QueryCommandCollection()
'delete out the existing
Dim cmdDel As QueryCommand = New QueryCommand("DELETE FROM <%=m.MapTableName%> WHERE <%=m.MapTableLocalTableKeyColumn%>=@<%=m.MapTableLocalTableKeyColumn%>", <%=className%>.Schema.Provider.Name)
cmdDel.AddParameter("@<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>)
'add this in
coll.Add(cmdDel)
DataService.ExecuteTransaction(coll)
For Each item As <%= varPKType%> In itemList
Dim var<%=m.ClassName%> As <%=m.ClassName%> = New <%= m.ClassName%>()
var<%=m.ClassName%>.SetColumnValue("<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>)
var<%=m.ClassName%>.SetColumnValue("<%=m.MapTableForeignTableKeyColumn%>", item)
var<%=m.ClassName%>.Save()
Next
End Sub
Public Shared Sub Delete<%=fkClass%>Map(ByVal <%= varPK%> As <%= varPKType%>)
Dim cmdDel As QueryCommand = New QueryCommand("DELETE FROM <%=m.MapTableName%> WHERE <%=m.MapTableLocalTableKeyColumn%>=@<%=m.MapTableLocalTableKeyColumn%>", <%=className%>.Schema.Provider.Name)
cmdDel.AddParameter("@<%=m.MapTableLocalTableKeyColumn%>", <%= varPK%>)
DataService.ExecuteQuery(cmdDel)
End Sub
<%
}
}
}
%>
#End Region
<%} else {%>
'no ManyToMany tables defined (<%=tbl.ManyToManys.Count.ToString() %>)
<%} %>
#Region "ObjectDataSource support"
<%
string insertArgs = string.Empty;
string updateArgs = string.Empty;
string seperator = ",";
foreach (TableSchema.TableColumn col in cols)
{
string propName = col.ArgumentName;
string varType = Utility.GetVariableType(col.DataType, col.IsNullable, lang);
updateArgs += "ByVal " + propName + " As " + varType + seperator;
if (!col.AutoIncrement)
{
insertArgs += "ByVal " + propName + " As " + varType + seperator;
}
}
if (insertArgs.Length > 0)
insertArgs = insertArgs.Remove(insertArgs.Length - seperator.Length, seperator.Length);
if (updateArgs.Length > 0)
updateArgs = updateArgs.Remove(updateArgs.Length - seperator.Length, seperator.Length);
%>
''' <summary>
''' Inserts a record, can be used with the Object Data Source
''' </summary>
Public Shared Sub Insert(<%=insertArgs%>)
Dim item As <%=className%> = New <%=className%>()
<%
foreach (TableSchema.TableColumn col in cols) {
if (!col.AutoIncrement)
{
%>
item.<%=col.PropertyName%> = <%=col.ArgumentName%>
<%
}
}
%>
If Not System.Web.HttpContext.Current Is Nothing Then
item.Save(System.Web.HttpContext.Current.User.Identity.Name)
Else
item.Save(System.Threading.Thread.CurrentPrincipal.Identity.Name)
End If
End Sub
''' <summary>
''' Updates a record, can be used with the Object Data Source
''' </summary>
Public Shared Sub Update(<%=updateArgs%>)
Dim item As <%=className%> = New <%=className%>()
<%
foreach (TableSchema.TableColumn col in cols)
{
%>
item.<%=col.PropertyName%> = <%=col.ArgumentName%>
<%
}
%>
item.IsNew = False
If Not System.Web.HttpContext.Current Is Nothing Then
item.Save(System.Web.HttpContext.Current.User.Identity.Name)
Else
item.Save(System.Threading.Thread.CurrentPrincipal.Identity.Name)
End If
End Sub
#End Region
#Region "Columns Struct"
Public Structure Columns
Dim x as Integer
<%
foreach (TableSchema.TableColumn col in cols) {
string propName = col.PropertyName;
%>
Public Shared <%=propName%> As String = "<%=col.ColumnName%>"
<%
}
%>
End Structure
#End Region
End Class
End Namespace</value>
</data>
<data name="VB_DynamicScaffold" xml:space="preserve">
<value><%@ Page Language="C#" %>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%
string masterPage = "#MASTERPAGE#";
string tableName = "#TABLENAME#";
string className = "#CLASSNAME#";
%>
<%
if (!String.IsNullOrEmpty(masterPage))
{
%>
[<]%@ Page Language="VB" Title="<%= className %> Scaffold" MasterPageFile="<%= masterPage %>" Theme="default" %[>]
[<]%@ Register Assembly="SubSonic" Namespace="SubSonic" TagPrefix="cc1" %[>]
[<]asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="server"[>]
[<]div[>]
[<]cc1:Scaffold ID="Scaffold1" runat="server" TableName="<%= tableName %>" GridViewSkinID="scaffold" EditTableItemCaptionCellCssClass="scaffoldEditLabel" ButtonCssClass="scaffoldButton" TextBoxCssClass="scaffoldTextBox"[>]
[<]/cc1:Scaffold[>]
[<]/div[>]
[<]/asp:Content[>]
<%
}
else
{
%>
[<]%@ Page Language="VB" Title="<%=className%> Scaffold" %[>]
[<]%@ Register Assembly="SubSonic" Namespace="SubSonic" TagPrefix="cc1" %[>]
[<]!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"[>]
[<]script language="javascript" type="text/javascript"[>]
function CheckDelete()
{
return confirm('Delete this record? This action cannot be undone...');
}
function imposeMaxLength(e, Object, MaxLen, rowIndex)
{
var keyCode = e.keyCode;
var counter = document.getElementById('counter' + rowIndex);
var charText = Object.value;
var charCount = charText.length;
var charRemain = MaxLen - charCount;
counter.style.visibility = 'visible';
if(keyCode == 8 || keyCode == 46)
{
if(charCount == MaxLen)
{
charRemain = 1;
}
else if(charCount == 0)
{
charRemain = MaxLen;
}
counter.innerHTML = charRemain;
return true;
}
else
{
if(charRemain [>] 0)
{
counter.innerHTML = charRemain;
return true;
}
else
{
Object.value = charText.substring(0, MaxLen);
counter.innerHTML = '0';
return false;
}
}
}
[<]/script[>]
[<]/head[>]
[<]body[>]
[<]form id="form1" runat="server"[>]
[<]div[>]
[<]cc1:Scaffold ID="Scaffold1" runat="server" TableName="<%= tableName %>" GridViewSkinID="scaffold" EditTableItemCaptionCellCssClass="scaffoldEditLabel" ButtonCssClass="scaffoldButton" TextBoxCssClass="scaffoldTextBox"[>]
[<]/cc1:Scaffold[>]
[<]/div[>]
[<]/form[>]
[<]/body[>]
[<]/html[>]
<%
}
%></value>
</data>
<data name="VB_GeneratedScaffoldCodeBehind" xml:space="preserve">
<value><%@ Page Language="C#" %>
<%@ Import namespace="System.Data"%>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%
//The data we need
string providerName = "#PROVIDER#";
string tableName = "#TABLENAME#";
string generatedClassName = "#PAGEFILE#";
TableSchema.Table tbl = DataService.GetSchema(tableName, providerName, TableType.Table);
DataProvider provider = DataService.Providers[providerName];
//The main vars we need
string className = tbl.ClassName;
%>
'Generated on <%=DateTime.Now.ToString()%> by <%=Environment.UserName%>
Imports System
Imports System.Data
Imports System.Configuration
Imports System.Collections
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls
Imports SubSonic
Imports SubSonic.Utilities
Imports <%=provider.GeneratedNamespace%>
Namespace <%=provider.GeneratedNamespace%>
Public Partial Class <%=generatedClassName%>
Inherits System.Web.UI.Page
Private isAdd As Boolean = False
Private Const SORT_DIRECTION As String = "SORT_DIRECTION"
Private Const ORDER_BY As String = "ORDER_BY"
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If Request.QueryString("id") <> Nothing Then
Dim id As String = Utility.GetParameter("id")
If Not String.IsNullOrEmpty(id) AndAlso id <> "0" Then
If Not Page.IsPostBack Then
LoadEditor(id)
End If
Else
'it's an add, show the editor
isAdd = True
ToggleEditor(True)
LoadDrops()
btnDelete.Visible = False
End If
Else
ToggleEditor(False)
If Not Page.IsPostBack Then
BindGrid(String.Empty)
End If
End If
End Sub
''' <summary>
''' Loads the editor with data
''' </summary>
''' <param name="id"></param>
Sub LoadEditor(ByVal id As String)
ToggleEditor(True)
LoadDrops()
If Not [String].IsNullOrEmpty(id) AndAlso id <> "0" Then
lblID.Text = id.ToString()
'pull the record
Dim item As <%=className%> = New <%=className%>(id)
'bind the page
<%
foreach (TableSchema.TableColumn col in tbl.Columns)
{
if (!col.IsPrimaryKey)
{
bool toString = true;
string controlAssignment = null;
bool isNullableType = (col.IsNullable && Utility.IsNullableDbType(col.DataType));
if (col.IsForeignKey)
{
toString = true;
controlAssignment = ControlValueProperty.DROP_DOWN_LIST;
}
else if(Utility.IsMatch(col.ColumnName, ReservedColumnName.CREATED_ON) || Utility.IsMatch(col.ColumnName, ReservedColumnName.MODIFIED_ON))
{
toString = true;
controlAssignment = ControlValueProperty.LABEL;
}
else
{
switch (col.DataType)
{
case DbType.Binary:
case DbType.Byte:
break;
case DbType.DateTime:
toString = false;
controlAssignment = ControlValueProperty.CALENDAR;
break;
case DbType.Boolean:
toString = false;
controlAssignment = ControlValueProperty.CHECK_BOX;
break;
case DbType.Currency:
case DbType.VarNumeric:
toString = true;
controlAssignment = ControlValueProperty.TEXT_BOX;
break;
case DbType.Int16:
case DbType.Int32:
case DbType.UInt16:
case DbType.Int64:
case DbType.UInt32:
case DbType.UInt64:
case DbType.Single:
case DbType.Decimal:
case DbType.Double:
toString = true;
controlAssignment = ControlValueProperty.TEXT_BOX;
break;
case DbType.AnsiString:
case DbType.AnsiStringFixedLength:
case DbType.String:
toString = false;
controlAssignment = ControlValueProperty.TEXT_BOX;
break;
default:
toString = true;
controlAssignment = ControlValueProperty.TEXT_BOX;
break;
}
}
string propName = col.PropertyName;
string controlID = "ctrl" + propName;
if (!String.IsNullOrEmpty(controlAssignment))
{
if (isNullableType)
{%>
If item.<%=propName%>.HasValue Then
<%
if (toString)
{%>
<%=controlID%>.<%=controlAssignment%> = item.<%=propName%>.Value.ToString()
<%
}
else
{%>
<%=controlID%>.<%=controlAssignment%> = item.<%=propName%>.Value
<%
}%>
End If
<%
}
else
{
if (toString)
{%>
<%=controlID%>.<%=controlAssignment%> = item.<%=propName%>.ToString()
<%
}
else
{%>
<%=controlID%>.<%=controlAssignment%> = item.<%=propName%>
<%
}
}
}
}
}
%>
'set the delete confirmation
btnDelete.Attributes.Add("onclick", "return CheckDelete();")
End If
End Sub
' <summary>
' Loads the DropDownLists
' </summary>
Private Sub LoadDrops()
'load the listboxes
<%
foreach (TableSchema.TableColumn col in tbl.Columns)
{
string controlName = "ctrl" + col.PropertyName;
if (!col.IsPrimaryKey)
{
if(col.IsForeignKey)
{
TableSchema.Table FKTable = DataService.GetForeignKeyTable(col, tbl);
if(FKTable != null)
{
%>
Dim qry<%= controlName %> As Query = <%= FKTable.ClassName %>.CreateQuery()
qry<%= controlName %>.OrderBy = OrderBy.Asc("<%= FKTable.Columns[1].ColumnName %>")
Utility.LoadDropDown(<%= controlName %>, qry<%= controlName %>.ExecuteReader(), True)
<%
if(col.IsNullable)
{
%> <%= controlName %>.Items.Insert(0, new ListItem("(Not Specified)", String.Empty))
<%
}
}
}
}
}
%>
End Sub
''' <summary>
''' Shows/Hides the Grid and Editor panels
''' </summary>
''' <param name="showIt"></param>
Sub ToggleEditor(ByVal showIt As Boolean)
pnlEdit.Visible = showIt
pnlGrid.Visible = Not showIt
End Sub
Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As EventArgs)
LoadEditor("0")
End Sub
Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As EventArgs)
<%= className %>.Delete(Utility.GetParameter("id"))
'redirect
Response.Redirect(Request.CurrentExecutionFilePath)
End Sub
Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim id As String = Utility.GetParameter("id")
'bool haveError = false;
Try
BindAndSave(id)
lblResult.Text = "[<]span style=""font-weight:bold; color:#22bb22""[>]Customer saved.[<]/span[>]"
Catch x As Exception
'haveError = true;
lblResult.Text = "[<]span style=""font-weight:bold; color:#990000""[>]Customer not saved:[<]/span[>] " + x.Message
End Try
'if(!haveError)
' Response.Redirect(Request.CurrentExecutionFilePath);
End Sub
'<summary>
'Binds and saves the data
'</summary>
'<param name="id"></param>
Private Sub BindAndSave(ByVal id As String)
Dim item As <%= className %>
If Not String.IsNullOrEmpty(id) AndAlso id <> "0" Then
'it's an edit
item = New <%= className %>(id)
Else
'add
item = New <%= className %>()
End If
<%
foreach (TableSchema.TableColumn col in tbl.Columns)
{
if (!col.IsPrimaryKey && col.DataType != DbType.Binary && col.DataType != DbType.Byte)
{
string controlID = "ctrl" + col.PropertyName;
string propName = col.PropertyName;
string converterType;
switch (col.DataType)
{
case DbType.Currency:
case DbType.VarNumeric:
converterType = "Decimal";
break;
case DbType.AnsiString:
case DbType.AnsiStringFixedLength:
converterType = "String";
break;
default:
converterType = col.DataType.ToString();
break;
}
%>
Dim val<%= controlID %> As Object = Utility.GetDefaultControlValue(<%= className %>.Schema.GetColumn("<%= col.ColumnName %>"), <%= controlID %>, isAdd, False)
<%
if (col.IsNullable)
{
%>
If val<%= controlID %> Is Nothing Then
item.<%= propName %> = Nothing
Else
<%
}
if (col.DataType != DbType.Guid)
{
%>
item.<%= propName %> = Convert.To<%= converterType %>(val<%= controlID %>)
<%
}
else
{
%>
item.<%= propName %> = New <%= converterType %>(val<%= controlID %>.ToString())
<%
}
if (col.IsNullable)
{
%>
End If
<%
}
}
}
%>
'bind it
item.Save(User.Identity.Name)
End Sub
''' <summary>
''' Binds the GridView
''' </summary>
Private Sub BindGrid(ByVal orderBy As String)
Dim tblSchema As TableSchema.Table = DataService.GetTableSchema("<%= tbl.Name %>", "<%= tbl.Provider.Name %>")
If Not tblSchema.PrimaryKey Is Nothing Then
Dim tbls As String() = tblSchema.Provider.GetForeignKeyTables(tblSchema.Name)
For Each tbl As String In tbls
DataService.GetTableSchema(tbl, tblSchema.Provider.Name)
Next
Dim query As New Query(tblSchema)
Dim sortColumn As String = Nothing
If Not [String].IsNullOrEmpty(orderBy) Then
sortColumn = orderBy
ElseIf ViewState(ORDER_BY) <> Nothing Then
sortColumn = DirectCast(ViewState(ORDER_BY), String)
End If
Dim colIndex As Integer = -1
If Not [String].IsNullOrEmpty(sortColumn) Then
ViewState.Add(ORDER_BY, sortColumn)
Dim col As TableSchema.TableColumn = tblSchema.GetColumn(sortColumn)
If col Is Nothing Then
Dim iCount As Integer = 0
While iCount < tblSchema.Columns.Count
Dim fkCol As TableSchema.TableColumn = tblSchema.Columns(iCount)
If fkCol.IsForeignKey AndAlso Not [String].IsNullOrEmpty(fkCol.ForeignKeyTableName) Then
Dim fkTbl As TableSchema.Table = DataService.GetSchema(fkCol.ForeignKeyTableName, tblSchema.Provider.Name, TableType.Table)
If Not fkTbl is Nothing Then
col = fkTbl.Columns(1)
colIndex = iCount
Exit While
End If
End If
iCount = iCount + 1
End While
End If
If Not col Is Nothing AndAlso col.MaxLength < 2048 Then
If ViewState(SORT_DIRECTION) = Nothing OrElse (DirectCast(ViewState(SORT_DIRECTION), String)) = SqlFragment.ASC Then
If colIndex > -1 Then
query.OrderBy = SubSonic.OrderBy.Asc(col, SqlFragment.JOIN_PREFIX + colIndex)
Else
query.OrderBy = SubSonic.OrderBy.Asc(col)
End If
ViewState(SORT_DIRECTION) = SqlFragment.ASC
Else
If colIndex > -1 Then
query.OrderBy = SubSonic.OrderBy.Desc(col, SqlFragment.JOIN_PREFIX + colIndex)
Else
query.OrderBy = SubSonic.OrderBy.Desc(col)
End If
ViewState(SORT_DIRECTION) = SqlFragment.DESC
End If
End If
End If
Dim dt As DataTable = query.ExecuteJoinedDataSet().Tables(0)
GridView1.DataSource = dt
Dim i As Integer = 1
While i < tblSchema.Columns.Count
Dim field As BoundField = DirectCast(GridView1.Columns(i), BoundField)
field.DataField = dt.Columns(i).ColumnName
field.SortExpression = dt.Columns(i).ColumnName
field.HtmlEncode = False
If tblSchema.Columns(i).IsForeignKey Then
Dim schema As TableSchema.Table
If tblSchema.Columns(i).ForeignKeyTableName = Nothing Then
schema = DataService.GetForeignKeyTable(tblSchema.Columns(i), tblSchema)
Else
schema = DataService.GetSchema(tblSchema.Columns(i).ForeignKeyTableName, tblSchema.Provider.Name, TableType.Table)
End If
If Not schema Is Nothing Then
field.HeaderText = schema.DisplayName
End If
Else
field.HeaderText = tblSchema.Columns(i).DisplayName
End If
i = i + 1
End While
GridView1.DataBind()
End If
End Sub
Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs)
GridView1.PageIndex = e.NewPageIndex
BindGrid(String.Empty)
End Sub
Protected Sub GridView1_DataBound(ByVal sender As Object, ByVal e As EventArgs)
Dim gvrPager As GridViewRow = GridView1.BottomPagerRow
If gvrPager Is Nothing Then
Return
End If
' get your controls from the gridview
Dim ddlPages As DropDownList = DirectCast(gvrPager.Cells(0).FindControl("ddlPages"), DropDownList)
Dim lblPageCount As Label = DirectCast(gvrPager.Cells(0).FindControl("lblPageCount"), Label)
If Not ddlPages Is Nothing Then
' populate pager
Dim i As Integer = 0
While i < GridView1.PageCount
Dim intPageNumber As Integer = i + 1
Dim lstItem As New ListItem(intPageNumber.ToString())
If i = GridView1.PageIndex Then
lstItem.Selected = True
End If
ddlPages.Items.Add(lstItem)
i = i + 1
End While
End If
Dim itemCount As Integer = 0
' populate page count
If Not lblPageCount Is Nothing Then
'pull the datasource
Dim ds As DataSet = TryCast(GridView1.DataSource, DataSet)
If Not ds Is Nothing Then
itemCount = ds.Tables(0).Rows.Count
End If
Dim pageCount As String = "[<]b[>]" + GridView1.PageCount.ToString() + "[<]/b[>] (" + itemCount.ToString() + " Items)"
lblPageCount.Text = pageCount
End If
Dim btnPrev As Button = DirectCast(gvrPager.Cells(0).FindControl("btnPrev"), Button)
Dim btnNext As Button = DirectCast(gvrPager.Cells(0).FindControl("btnNext"), Button)
Dim btnFirst As Button = DirectCast(gvrPager.Cells(0).FindControl("btnFirst"), Button)
Dim btnLast As Button = DirectCast(gvrPager.Cells(0).FindControl("btnLast"), Button)
'now figure out what page we're on
If GridView1.PageIndex = 0 Then
btnPrev.Enabled = False
btnFirst.Enabled = False
ElseIf GridView1.PageIndex + 1 = GridView1.PageCount Then
btnLast.Enabled = False
btnNext.Enabled = False
Else
btnLast.Enabled = True
btnNext.Enabled = True
btnPrev.Enabled = True
btnFirst.Enabled = True
End If
End Sub
Protected Sub ddlPages_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim gvrPager As GridViewRow = GridView1.BottomPagerRow
Dim ddlPages As DropDownList = DirectCast(gvrPager.Cells(0).FindControl("ddlPages"), DropDownList)
GridView1.PageIndex = ddlPages.SelectedIndex
' a method to populate your grid
BindGrid(String.Empty)
End Sub
Protected Sub GridView1_Sorting(ByVal sender As Object, ByVal e As GridViewSortEventArgs)
Dim columnName As String = e.SortExpression
'rebind the grid
If ViewState(SORT_DIRECTION) = Nothing OrElse ViewState(SORT_DIRECTION).ToString() = SqlFragment.ASC Then
ViewState(SORT_DIRECTION) = SqlFragment.DESC
Else
ViewState(SORT_DIRECTION) = SqlFragment.ASC
End If
BindGrid(columnName)
End Sub
Function GetSortDirection(ByVal sortBy As String) As String
Dim sortDir As String = " ASC"
If ViewState("sortBy") <> Nothing Then
Dim sortedBy As String = ViewState("sortBy").ToString()
If sortedBy = sortBy Then
'the direction should be desc
sortDir = " DESC"
'reset the sorter to null
ViewState("sortBy") = Nothing
Else
'this is the first sort for this row
'put it to the ViewState
ViewState("sortBy") = sortBy
End If
Else
'it's null, so this is the first sort
ViewState("sortBy") = sortBy
End If
Return sortDir
End Function
End Class
End Namespace</value>
</data>
<data name="VB_GeneratedScaffoldMarkup" xml:space="preserve">
<value><%@ Page Language="C#" %>
<%@ Import namespace="System.Data"%>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%
string masterPage = "#MASTERPAGE#";
string tableName = "#TABLENAME#";
string className = "#CLASSNAME#";
string generatedClassName = "#PAGEFILE#";
string fileExtension = "#LANGEXTENSION#";
string providerName = "#PROVIDER#";
DataProvider provider = DataService.GetInstance(providerName);
TableSchema.Table tbl = DataService.GetSchema(tableName, provider.Name, TableType.Table);
%>
<%
if (String.IsNullOrEmpty(masterPage))
{
%>
[<]%@ Page Language="VB" Title="<%=className%> Scaffold" CodeFile="<%=generatedClassName%>.aspx<%=fileExtension%>" Inherits="<%=provider.GeneratedNamespace%>.<%=generatedClassName%>" %[>]
[<]!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"[>]
[<]title[>]<%=className%>[<]/title[>]
[<]script language="javascript" type="text/javascript"[>]
function CheckDelete()
{
return confirm('Delete this record? This action cannot be undone...');
}
function imposeMaxLength(e, Object, MaxLen, rowIndex)
{
var keyCode = e.keyCode;
var counter = document.getElementById('counter' + rowIndex);
var charText = Object.value;
var charCount = charText.length;
var charRemain = MaxLen - charCount;
counter.style.visibility = 'visible';
if(keyCode == 8 || keyCode == 46)
{
if(charCount == MaxLen)
{
charRemain = 1;
}
else if(charCount == 0)
{
charRemain = MaxLen;
}
counter.innerHTML = charRemain;
return true;
}
else
{
if(charRemain [>] 0)
{
counter.innerHTML = charRemain;
return true;
}
else
{
Object.value = charText.substring(0, MaxLen);
counter.innerHTML = '0';
return false;
}
}
}
[<]/script[>]
[<]/head[>]
[<]body[>]
[<]form id="elForm" runat="server"[>]
<%
}
else
{
%>
[<]%@ Page Language="VB" Title="<%=className%> Scaffold" CodeFile="<%=generatedClassName%>.aspx<%=fileExtension%>" Inherits="<%=provider.GeneratedNamespace%>.<%=generatedClassName%>" MasterPageFile="<%= masterPage %>" Theme="default" %[>]
[<]asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="server"[>]
<%
}
%>
[<]h2[>]<%= className %>[<]/h2[>]
[<]asp:Panel id="pnlGrid" runat="server"[>]
[<]asp:GridView
ID="GridView1"
runat="server"
AllowPaging="True"
AllowSorting="True"
AutoGenerateColumns="False"
OnDataBound="GridView1_DataBound"
OnSorting="GridView1_Sorting"
OnPageIndexChanging="GridView1_PageIndexChanging"
DataKeyNames="<%= tbl.PrimaryKey.ColumnName %>"
PageSize="50"
[>]
[<]Columns[>]
[<]asp:HyperLinkField Text="Edit" DataNavigateUrlFields="<%= tbl.PrimaryKey.ColumnName %>" DataNavigateUrlFormatString="<%= generatedClassName %>.aspx?id={0}" /[>]
<%
foreach (TableSchema.TableColumn col in tbl.Columns)
{
if(!col.IsPrimaryKey)
{
%>
[<]asp:BoundField DataField="<%=col.ColumnName%>" HeaderText="<%=col.DisplayName%>" SortExpression="<%=col.ColumnName%>"[>][<]/asp:BoundField[>]
<%
}
}
%>
[<]/Columns[>]
[<]EmptyDataTemplate[>]
No <%= tbl.ClassNamePlural %>
[<]/EmptyDataTemplate[>]
[<]PagerTemplate[>]
[<]div style="border-top:1px solid #666666"[>]
[<]br /[>]
[<]asp:Button ID="btnFirst" runat="server" CssClass="scaffoldButton" Text="[<][<] First" CommandArgument="First" CommandName="Page"/[>]
[<]asp:Button ID="btnPrev" runat="server" CssClass="scaffoldButton" Text="[<] Previous" CommandArgument="Prev" CommandName="Page"/[>]
Page
[<]asp:DropDownList ID="ddlPages" runat="server" CssClass="scaffoldEditItem" AutoPostBack="True" OnSelectedIndexChanged="ddlPages_SelectedIndexChanged"[>]
[<]/asp:DropDownList[>] of [<]asp:Label ID="lblPageCount" runat="server"[>][<]/asp:Label[>]
[<]asp:Button ID="btnNext" runat="server" CssClass="scaffoldButton" Text="Next [>]" CommandArgument="Next" CommandName="Page"/[>]
[<]asp:Button ID="btnLast" runat="server" CssClass="scaffoldButton" Text="Last [>][>]" CommandArgument="Last" CommandName="Page"/[>]
[<]/PagerTemplate[>]
[<]/asp:GridView[>]
[<]a href="<%= generatedClassName %>.aspx?id=0"[>]Add New...[<]/a[>]
[<]/asp:Panel[>]
[<]asp:panel id="pnlEdit" Runat="server"[>]
[<]asp:Label ID="lblResult" runat="server"[>][<]/asp:Label[>]
[<]table class="scaffoldEditTable" cellpadding="5" cellspacing="0" Width="600px"[>]
[<]tr[>]
[<]td class="scaffoldEditItemCaption"[>]<%= tbl.PrimaryKey.DisplayName %>[<]/td[>]
[<]td class="scaffoldEditItem"[>][<]asp:Label id="lblID" runat="server" /[>][<]/td[>]
[<]/tr[>]
<%
foreach (TableSchema.TableColumn col in tbl.Columns)
{
if(!col.IsPrimaryKey)
{
%>
[<]tr[>]
[<]td class="scaffoldEditItemCaption"[>]<%=col.DisplayName%>[<]/td[>]
<%
string controlID = "ctrl" + col.PropertyName;
string displayPrefix = String.Empty;
string controlType;
string controlProperties = String.Empty;
bool isTextBox = false;
if(col.IsForeignKey)
{
controlType = "DropDownList";
}
else
{
switch(col.DataType)
{
case DbType.Binary:
case DbType.Byte:
controlType = String.Empty;
break;
case DbType.Guid:
case DbType.AnsiString:
case DbType.String:
case DbType.StringFixedLength:
case DbType.Xml:
case DbType.Object:
case DbType.AnsiStringFixedLength:
if(Utility.IsMatch(col.ColumnName, ReservedColumnName.CREATED_BY) || Utility.IsMatch(col.ColumnName, ReservedColumnName.MODIFIED_BY))
{
controlType = "Label";
}
else
{
isTextBox = true;
controlType = "TextBox";
if(col.MaxLength > 250)
{
controlProperties += "TextMode=\"MultiLine\" ";
controlProperties += "Height=\"100px\" ";
controlProperties += "Width=\"500px\" ";
}
}
break;
case DbType.Date:
case DbType.Time:
case DbType.DateTime:
if(Utility.IsMatch(col.ColumnName, ReservedColumnName.MODIFIED_ON) || Utility.IsMatch(col.ColumnName, ReservedColumnName.CREATED_ON))
{
controlType = "Label";
}
else
{
controlType = "Calendar";
}
break;
case DbType.Int16:
case DbType.Int32:
case DbType.UInt16:
case DbType.Int64:
case DbType.UInt32:
case DbType.UInt64:
case DbType.VarNumeric:
case DbType.Single:
case DbType.Currency:
case DbType.Decimal:
case DbType.Double:
isTextBox = true;
controlType = "TextBox";
controlProperties += "Width=\"50px\" ";
if(col.DataType == DbType.Currency)
{
displayPrefix = "$";
}
break;
case DbType.Boolean:
bool isChecked = false;
if(Utility.IsMatch(col.ColumnName, ReservedColumnName.IS_ACTIVE))
{
isChecked = true;
}
controlType = "CheckBox";
controlProperties += "Checked=\"" + isChecked + "\" ";
break;
default:
isTextBox = true;
controlType = "TextBox";
break;
}
}
if(isTextBox && col.MaxLength > 0)
{
controlProperties += "MaxLength=\"" + col.MaxLength + "\" ";
}
string controlMarkup = String.Empty;
if(!String.IsNullOrEmpty(controlType))
{
controlMarkup = displayPrefix + "<asp:" + controlType + " ID=\"" + controlID + "\" runat=\"server\" " + controlProperties + "></asp:" + controlType + ">";
}
%>
[<]td class="scaffoldEditItem"[>]<%=controlMarkup%>[<]/td[>]
[<]/tr[>]
<%
}
}
%>
[<]tr[>]
[<]td colspan="2" align="left"[>]
[<]asp:Button id="btnSave" CssClass="scaffoldButton" runat="server" Text="Save" OnClick="btnSave_Click"[>][<]/asp:Button[>]&nbsp;
[<]input type="button" onclick="location.href='<%= generatedClassName %>.aspx'" class="scaffoldButton" value="Return" /[>]
[<]asp:Button id="btnDelete" CssClass="scaffoldButton" runat="server" CausesValidation="False" Text="Delete" OnClick="btnDelete_Click"[>][<]/asp:Button[>][<]/td[>]
[<]/tr[>]
[<]/table[>]
[<]/asp:panel[>]
<%if(String.IsNullOrEmpty(masterPage))
{
%>
[<]/form[>]
[<]/body[>]
[<]/html[>]
<%
}
else
{
%>
[<]/asp:Content[>]
<%
}
%></value>
</data>
<data name="VB_ODSController" xml:space="preserve">
<value><%@ Page Language="C#" %>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%
//The data we need
string providerName = "#PROVIDER#";
string tableName = "#TABLE#";
TableSchema.Table tbl = DataService.GetSchema(tableName, providerName, TableType.Table);
DataProvider provider = DataService.Providers[providerName];
LanguageType lang = LanguageType.VB;
//The main vars we need
TableSchema.TableColumnCollection cols = tbl.Columns;
%>
'Generated on <%=DateTime.Now.ToString() %> by <%=Environment.UserName %>
Namespace <%=provider.GeneratedNamespace %>
''' <summary>
''' Controller class for <%=tbl.Name %>
''' </summary>
[<]System.ComponentModel.DataObject()[>] Public Partial Class <%=tbl.ClassName %>Controller
' Preload our schema..
Dim thisSchemaLoad As <%=tbl.ClassName%> = New <%=tbl.ClassName%>()
Private strUserName As String = String.Empty
Protected ReadOnly Property UserName() As String
Get
If strUserName.Length = 0 Then
If Not System.Web.HttpContext.Current Is Nothing Then
strUserName = System.Web.HttpContext.Current.User.Identity.Name
Else
strUserName = System.Threading.Thread.CurrentPrincipal.Identity.Name
End If
Return strUserName
End If
Return strUserName
End Get
End Property
[<]DataObjectMethod(DataObjectMethodType.Select, True)[>] Public Function FetchAll() As <%=tbl.ClassName%>Collection
Dim coll As <%=tbl.ClassName%>Collection = New <%=tbl.ClassName%>Collection()
Dim qry As Query = New Query(<%=tbl.ClassName%>.Schema)
coll.Load(qry.ExecuteReader())
Return coll
End Function
[<]DataObjectMethod(DataObjectMethodType.Select, True)[>] Public Function FetchByID(ByVal <%=tbl.PrimaryKey.PropertyName%> As Object) As <%=tbl.ClassName%>Collection
Dim coll As <%=tbl.ClassName%>Collection = New <%=tbl.ClassName%>Collection().Where("<%=tbl.PrimaryKey.ColumnName %>", <%=tbl.PrimaryKey.PropertyName%>).Load()
Return coll
End Function
[<]DataObjectMethod(DataObjectMethodType.Select, True)[>] Public Function FetchByQuery(ByVal qry As SubSonic.Query) As <%=tbl.ClassName%>Collection
Dim coll As <%=tbl.ClassName%>Collection = New <%=tbl.ClassName%>Collection()
coll.Load(qry.ExecuteReader())
Return coll
End Function
[<]DataObjectMethod(DataObjectMethodType.Delete, True)[>] Public Function Delete(ByVal <%=tbl.PrimaryKey.PropertyName%> As Object) as Boolean
Return (<%=tbl.ClassName%>.Delete(<%=tbl.PrimaryKey.PropertyName%>) = 1)
End Function
[<]DataObjectMethod(DataObjectMethodType.Delete, False)[>] Public Function Destroy(ByVal <%=tbl.PrimaryKey.PropertyName%> As Object) as Boolean
Return (<%=tbl.ClassName%>.Destroy(<%=tbl.PrimaryKey.PropertyName%>) = 1)
End Function
<%
string insertArgs = string.Empty;
string updateArgs = string.Empty;
string seperator = ",";
foreach (TableSchema.TableColumn col in cols)
{
string propName = col.PropertyName;
string varType = Utility.GetVariableType(col.DataType, col.IsNullable, lang);
updateArgs += "ByVal " + propName + " As " + varType + seperator;
if (!col.AutoIncrement)
{
insertArgs += "ByVal " + propName + " As " + varType + seperator;
}
}
if (insertArgs.Length > 0)
insertArgs = insertArgs.Remove(insertArgs.Length - seperator.Length, seperator.Length);
if (updateArgs.Length > 0)
updateArgs = updateArgs.Remove(updateArgs.Length - seperator.Length, seperator.Length);
%>
''' <summary>
''' Inserts a record, can be used with the Object Data Source
''' </summary>
[<]DataObjectMethod(DataObjectMethodType.Insert, True)[>] Public Sub Insert(<%=insertArgs%>)
Dim item As <%=tbl.ClassName %> = New <%= tbl.ClassName %>()
<%
foreach (TableSchema.TableColumn col in cols) {
if (!col.AutoIncrement) {
%>
item.<%=col.PropertyName%> = <%=col.PropertyName%>
<%
}
}
%>
item.Save(UserName)
End Sub
''' <summary>
''' Updates a record, can be used with the Object Data Source
''' </summary>
[<]DataObjectMethod(DataObjectMethodType.Update, True)[>] Public Sub Update(<%=updateArgs%>)
Dim item As <%=tbl.ClassName%> = New <%=tbl.ClassName %>()
<%
foreach (TableSchema.TableColumn col in cols)
{
%>
item.<%=col.PropertyName%> = <%=col.PropertyName%>
<%
}
%>
item.MarkOld()
item.Save(UserName)
End Sub
End Class
End Namespace</value>
</data>
<data name="VB_SPTemplate" xml:space="preserve">
<value><%@ Page Language="C#"%>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%@ Import Namespace="SubSonic.CodeGenerator" %>
<%@ Import Namespace="System.Data" %>
<%
string providerName = "#PROVIDER#";
LanguageType lang = LanguageType.VB;
DataProvider provider = DataService.GetInstance(providerName);
System.Collections.Generic.List<StoredProcedure> spList = DataService.GetSPSchemaCollection(providerName);
ArrayList classStoredProcedures = new ArrayList();
%>
Namespace <%=provider.GeneratedNamespace %>
Public Partial Class <%=provider.SPClassName%>
<%foreach (StoredProcedure sp in spList)
{
if(Utility.IsMatch(sp.TableName, provider.SPClassName))
{
//load up a the params
string argList = string.Empty;
bool isFirst = true;
foreach(StoredProcedure.Parameter p in sp.Parameters)
{
if(!isFirst)
{
argList += ", ";
}
isFirst = false;
string pType = Utility.GetVariableType(p.DBType, lang);
string arg = p.DisplayName;
argList += "ByVal " + p.DisplayName + " As " + pType;
}
%>
''' <summary>
''' Creates an object wrapper for the <%=sp.Name %> Procedure
''' </summary>
Public Shared Function <%=sp.DisplayName%>(<%=argList %>) As StoredProcedure
Dim sp As New SubSonic.StoredProcedure("<%=sp.Name%>" , DataService.GetInstance("<%= providerName %>"))
<%foreach (StoredProcedure.Parameter p in sp.Parameters) {%>
<%if (p.Mode == ParameterDirection.InputOutput) { %>
sp.Command.AddOutputParameter("<%=p.QueryParameter %>",DbType.<%=Enum.GetName(typeof(DbType), p.DBType)%>)
<%} else { %>
sp.Command.AddParameter("<%=p.QueryParameter%>", <%=p.DisplayName%>,DbType.<%=Enum.GetName(typeof(DbType), p.DBType)%>)
<%} %>
<%} %>
Return sp
End Function
<% }
else
{
classStoredProcedures.Add(sp);
}
}%>
End Class
<%
foreach (StoredProcedure sp in classStoredProcedures)
{
string className = sp.TableName;
TableSchema.Table tbl = DataService.GetTableSchema(sp.TableName, provider.Name, TableType.Table);
if (tbl != null)
{
className = tbl.ClassName;
}
string argList = string.Empty;
bool isFirst = true;
foreach (StoredProcedure.Parameter p in sp.Parameters)
{
if (!isFirst)
{
argList += ", ";
}
isFirst = false;
string pType = Utility.GetVariableType(p.DBType, lang);
string arg = p.DisplayName;
argList += "ByVal " + p.DisplayName + " As " + pType;
}
%>
Public Partial Class <%= className%>
''' <summary>
''' Creates an object wrapper for the <%=sp.Name%> Procedure
''' </summary>
Public Shared Function <%=sp.DisplayName%>(<%=argList%>) As StoredProcedure
Dim sp As New SubSonic.StoredProcedure("<%=sp.Name%>" , DataService.GetInstance("<%= providerName %>"))
<%foreach (StoredProcedure.Parameter p in sp.Parameters)
{%>
<%if (p.Mode == ParameterDirection.InputOutput)
{ %>
sp.Command.AddOutputParameter("<%=p.QueryParameter%>",DbType.<%=Enum.GetName(typeof(DbType), p.DBType)%>)
<%}
else
{ %>
sp.Command.AddParameter("<%=p.QueryParameter%>", <%=p.DisplayName%>,DbType.<%=Enum.GetName(typeof(DbType), p.DBType)%>)
<%} %>
<%} %>
Return sp
End Function
End Class
<%
}
%>
End Namespace</value>
</data>
<data name="VB_StructsTemplate" xml:space="preserve">
<value><%@ Page Language="C#"%>
<%@ Import Namespace="SubSonic" %>
<%@ Import Namespace="SubSonic.CodeGenerator" %>
<%@ Import Namespace="System.Data" %>
<%foreach(DataProvider p in DataService.Providers){
TableSchema.Table[] tables = DataService.GetTables(p.Name);
TableSchema.Table[] views = DataService.GetViews(p.Name);
%>
Namespace <%=p.GeneratedNamespace%>
#Region "Tables Struct"
Public Partial Structure Tables
Dim x As Integer
<%
foreach (TableSchema.Table t in tables)
{
if(CodeService.ShouldGenerate(t.Name, p.Name))
{
%>
Public Shared <%= t.ClassName %> As String = "<%= t.ClassName %>"
<%
}
}
%>
End Structure
#End Region
#region "View Struct"
Public Partial Structure Views
Dim x As Integer
<%
foreach (TableSchema.Table v in views)
{
if (CodeService.ShouldGenerate(v.Name, p.Name))
{
%>
Public Shared <%= v.ClassName %> As String = "<%= v.ClassName %>"
<%
}
}
%>
End Structure
#End Region
End Namespace
<%} %>
#Region "Databases"
Public Partial Structure Databases
Dim x As Integer
<%foreach (DataProvider p in DataService.Providers) { %>
Public Shared <%= p.Name %> As String = "<%= p.Name%>"
<%}%>
End Structure
#End Region</value>
</data>
<data name="VB_ViewTemplate" xml:space="preserve">
<value><%@ Page Language="C#"%>
<%@ Import namespace="SubSonic.Utilities"%>
<%@ Import Namespace="SubSonic" %>
<%
string providerName = "#PROVIDER#";
string viewName = "#VIEW#";
//The data we need
TableSchema.Table view = DataService.GetSchema(viewName, providerName, TableType.View);
LanguageType lang = LanguageType.VB;
//The main vars we need
TableSchema.TableColumnCollection cols = view.Columns;
string className = view.ClassName;
string nSpace = DataService.Providers[providerName].GeneratedNamespace;
%>
Namespace <%=nSpace %>
''' <summary>
''' Strongly-typed collection for the <%=className%> class.
''' </summary>
<Serializable()> _
Public Partial Class <%=className%>Collection
Inherits ReadOnlyList(Of <%= className %>)
#Region "Collection"
Private wheres As List(Of Where) = new List(Of Where)
Private betweens As List(Of BetweenAnd) = new List(Of BetweenAnd)
Private orderBy As SubSonic.OrderBy
Public Function OrderByAsc(ByVal columnName As String) As <%=className%>Collection
Me.orderBy = SubSonic.OrderBy.Asc(columnName)
Return Me
End Function
Public Function OrderByDesc(ByVal columnName As String) As <%=className%>Collection
Me.orderBy = SubSonic.OrderBy.Desc(columnName)
Return Me
End Function
Public Function WhereDatesBetween(ByVal columnName As String, ByVal dateStart As DateTime, ByVal dateEnd As DateTime) As <%=className%>Collection
Return BetweenAnd(columnName, dateStart, dateEnd)
End Function
Public Function Where(ByVal varWhere As Where) As <%=className%>Collection
wheres.Add(varWhere)
Return Me
End Function
Public Function Where(ByVal columnName As String, ByVal value As Object) As <%=className%>Collection
If (value IsNot DBNull.Value And value IsNot Nothing) Then
Return Where(columnName, Comparison.Equals, value)
Else
Return Where(columnName, Comparison.Is, DBNull.Value)
End If
End Function
Public Function Where(ByVal columnName As String, ByVal comp As Comparison, ByVal value As Object) As <%=className%>Collection
Dim varWhere As New Where()
varWhere.ColumnName = columnName
varWhere.Comparison = comp
varWhere.ParameterValue = value
Where(varWhere)
Return Me
End Function
Public Function BetweenAnd(ByVal columnName As String, ByVal dateStart As DateTime, ByVal dateEnd As DateTime) As <%=className%>Collection
Dim between As New BetweenAnd()
between.ColumnName = columnName
between.StartDate = dateStart
between.EndDate = dateEnd
between.StartParameterName = "start" + columnName
between.EndParameterName = "end" + columnName
betweens.Add(between)
Return Me
End Function
Public Overloads Function Load() As <%=className%>Collection
Dim qry As New Query(<%=className%>.Schema)
CheckLogicalDelete(qry)
For Each where As Where In wheres
qry.AddWhere(where)
Next
For Each between As BetweenAnd In betweens
qry.AddBetweenAnd(between)
Next
If (orderBy IsNot Nothing) Then
qry.OrderBy = orderBy
End If
Dim rdr As IDataReader = qry.ExecuteReader()
MyBase.Load(rdr)
rdr.Close()
Return Me
End Function
Public Sub New()
End Sub
#End Region
End Class
''' <summary>
''' This is Read-only wrapper class for the <%=viewName%> view.
''' </summary>
<Serializable()> _
Public Partial Class <%=className%>
Inherits ReadOnlyRecord(Of <%= className %>)
#Region "Default Settings"
Protected Shared Sub SetSQLProps()
GetTableSchema()
End Sub
#End Region
#Region "Schema Accessor"
Public Shared ReadOnly Property Schema() As TableSchema.Table
Get
If (BaseSchema Is Nothing) Then
SetSQLProps()
End If
Return BaseSchema
End Get
End Property
Private Shared Sub GetTableSchema()
If (Not IsSchemaInitialized) Then
'Schema declaration
Dim schema As TableSchema.Table = New TableSchema.Table("<%=viewName%>", TableType.View, DataService.GetInstance("<%=providerName%>"))
schema.Columns = New TableSchema.TableColumnCollection()
schema.SchemaName = "<%=view.SchemaName %>"
'Columns
<%
string propertyName = string.Empty;
foreach(TableSchema.TableColumn col in cols){
string varName = "col" + col.ArgumentName;
%>
Dim <%=varName %> As New TableSchema.TableColumn(schema)
<%=varName %>.ColumnName = "<%=propertyName%>"
<%=varName %>.DataType = DbType.<%=col.DataType %>
<%=varName %>.MaxLength = <%=col.MaxLength %>
<%=varName %>.AutoIncrement = False
<%=varName %>.IsNullable = <%=col.IsNullable.ToString().ToLower()%>
<%=varName %>.IsPrimaryKey = False
<%=varName %>.IsForeignKey = False
<%=varName %>.IsReadOnly = <%= col.IsReadOnly.ToString().ToLower() %>
<%
if(col.IsForeignKey)
{
%>
<%=varName %>.ForeignKeyTableName = "<%= col.ForeignKeyTableName %>"
<% } %>
schema.Columns.Add(<%=varName%>)
<%
}
%>
BaseSchema = schema
'add this schema to the provider
'so we can query it later
DataService.Providers("<%=providerName %>").AddSchema("<%=viewName%>",schema)
End If
End Sub
#End Region
#Region "Query Accessor"
Public Shared Function CreateQuery As Query
Return New Query(Schema)
End Function
#End Region
#Region ".ctors"
Public Sub New()
SetSQLProps()
SetDefaults()
MarkNew()
End Sub
Public Sub New(ByVal keyID As Object)
SetSQLProps()
LoadByKey(keyID)
End Sub
Public Sub new(ByVal columnName As String, ByVal columnValue As Object)
SetSQLProps()
LoadByParam(columnName , columnValue)
End Sub
#End Region
#Region "Props"
<%
foreach(TableSchema.TableColumn col in cols){
string propName = col.PropertyName;
string varType = Utility.GetVariableType(col.DataType, col.IsNullable, lang);
%>
<XmlAttribute("<%=propName%>")> _
Public Property <%=propName%>() As <%=varType%>
Get
Return GetColumnValue(Of <%= varType %>)("<%=propName%>")
End Get
Set(ByVal value As <%=varType%>)
MarkDirty()
SetColumnValue("<%=propName%>", value)
End Set
End Property
<%
}
%>
#End Region
#Region "Columns Struct"
Public Structure Columns
Dim x as Integer
<%
foreach (TableSchema.TableColumn col in cols) {
string propName = col.PropertyName;
%>
Public Shared <%=propName%> As String = "<%=propName%>"
<%
}
%>
End Structure
#End Region
End Class
End Namespace</value>
</data>
</root>