识别表单为Subsonic实体(适合于easyui)

来源:互联网 发布:淘宝店生产许可证编号 编辑:程序博客网 时间:2024/05/12 23:28

    首先看一下结构图(基于Subsonic 2.2):

    1.代码引用:

SubsonicSystemSystem.DataSystem.XML

    2.表单Form类:

using System.Collections.Specialized;using SubSonic;namespace Reuse.Operater{    public sealed class Form<T> where T : ReadOnlyRecord<T>, new()    {        NameValueCollection itemsForm;        public NameValueCollection ItemsForm { get { return itemsForm; } set { itemsForm = value; } }        public NameValueCollection CopyForm()        {            NameValueCollection form = new NameValueCollection();            foreach (string key in ItemsForm.AllKeys)            {                form.Add(key, ItemsForm[key]);            }            return form;        }        public T GetEntity(T entity)        {            foreach (string itemForm in ItemsForm.AllKeys)            {                entity.SetColumnValue(itemForm, ItemsForm[itemForm]);            }            return entity;        }    }}

    3.父类AbstractOperater类:

using System.Collections.Specialized;using SubSonic;namespace Reuse.Operater{    public abstract class AbstractOperater<T>        where T : ReadOnlyRecord<T>, new()    {        protected Form<T> form;        protected Form<T> Form { get { return form; } set { form = value; } }        public AbstractOperater(NameValueCollection itemsForm)        {            Form = new Form<T>();            Form.ItemsForm = itemsForm;        }    }}

    4.Add类:

using System.Collections.Specialized;using SubSonic;namespace Reuse.Operater{    public class Add<T> : AbstractOperater<T>        where T : ActiveRecord<T>, new()    {        protected T entity = new T();        public T Entity { get { return entity; } set { entity = value; } }        private object primaryKey;        public object PrimaryKey { get { return primaryKey; } private set { primaryKey = value; } }        public Add(NameValueCollection itemsForm)            : base(itemsForm)        {            Mark();        }        public NameValueCollection CopyForm()        {            return Form.CopyForm();        }        public void Save()        {            Entity.Save();            PrimaryKey = Entity.GetPrimaryKeyValue();        }        public void DirectSave()        {            GetEntity();            Save();        }        protected virtual void Mark()        {            Entity = new T();            Entity.MarkNew();        }        public T GetEntity()        {            return Form.GetEntity(Entity);        }    }}

    5.Edit类:

using System.Collections.Specialized;using SubSonic;namespace Reuse.Operater{    public sealed class Edit<T> : Add<T>        where T : ActiveRecord<T>, new()    {        public Edit(NameValueCollection itemsForm)            : base(itemsForm)        {            Mark();        }        protected override void Mark()        {            base.Entity = new T();            base.Entity.MarkOld();        }    }}

    6.Detail类:

using System.Collections.Specialized;using SubSonic;namespace Reuse.Operater{    public sealed class Detail<T> : AbstractOperater<T>        where T : ReadOnlyRecord<T>, new()    {        public Detail(NameValueCollection itemsForm)            : base(itemsForm)        {        }        public T LoadByCode()        {            T entity = InitEntity();            entity.LoadByKey(GetCode());            return entity;        }        public T LoadByParam(string columnName, string code)        {            T entity = InitEntity();            entity.LoadByParam(columnName, code);            return entity;        }        private T InitEntity()        {            T entity = new T();            return entity;        }        private string GetCode()        {            return Form.ItemsForm["code"];        }    }}

    7.Delete类:

using System.Collections.Specialized;using SubSonic;namespace Reuse.Operater{    public sealed class Delete<T> : AbstractOperater<T>        where T : ActiveRecord<T>, new()    {        private SqlQuery sqlQuery;        public SqlQuery SqlQuery { get { return sqlQuery; } set { sqlQuery = value; } }        public Delete(NameValueCollection itemsForm)            : base(itemsForm)        {            SqlQuery = new Delete().From<T>();        }        public int DirectDelete(string colName, object value)        {            return SqlQuery.Where(colName).IsEqualTo(value).Execute();        }        public int DirectDelete()        {            T entity = new T();            string code = Form.ItemsForm["code"];            return SqlQuery.Where(entity.GetSchema().PrimaryKey.ColumnName).IsEqualTo(code).Execute();        }    }}

    8.List类:

using System.Collections.Specialized;using System.Data;using SubSonic;namespace Reuse.Operater{    public sealed class List<T> : AbstractOperater<T>        where T : ReadOnlyRecord<T>, new()    {        private SqlQuery sqlQuery;        public SqlQuery SqlQuery { get { return sqlQuery; } set { sqlQuery = value; } }        delegate void isEquals(string itemForm, string value);        isEquals isEqualsDelegate;        private bool loadedFlag = false;        private int currentPage;        private int CurrentPage { get { return currentPage; } set { currentPage = value; } }        private int pageSize;        private int PageSize { get { return pageSize; } set { pageSize = value; } }        private int recordCount;        public int RecordCount { get { return recordCount; } private set { recordCount = value; } }        public List(NameValueCollection itemsForm)            : base(itemsForm)        {            SqlQuery = new Select().From<T>();        }        public NameValueCollection CopyForm()        {            return Form.CopyForm();        }        public void GetSqlquery()        {            Form.ItemsForm = CopyForm();            if (IsPresice())            {                isEqualsDelegate += new List<T>.isEquals(GetEquals);            }            else            {                isEqualsDelegate += new List<T>.isEquals(GetLike);            }            foreach (string itemForm in Form.ItemsForm.AllKeys)            {                loadedFlag = false;                string value = Form.ItemsForm[itemForm];                if (!loadedFlag) IsPresice(itemForm, value);                if (!loadedFlag) IsDateStart(itemForm, value);                if (!loadedFlag) IsDateEnd(itemForm, value);                if (!loadedFlag) IsCurrentPage(itemForm, value);                if (!loadedFlag) IsPageSize(itemForm, value);                isEqualsDelegate(itemForm, value);            }        }        public DataSet GetDataSet()        {            RecordCount = SqlQuery.GetRecordCount();            if (CurrentPage > 0 && PageSize > 0)                SqlQuery.Paged(CurrentPage, PageSize);            isEqualsDelegate = null;            return SqlQuery.ExecuteDataSet();        }        public DataSet DirectList()        {            GetSqlquery();            return GetDataSet();        }        private void GetEquals(string itemForm, string value)        {            if (!loadedFlag) IsEqualTo(itemForm, value);        }        private void GetLike(string itemForm, string value)        {            if (!loadedFlag) IsLike(itemForm, value);        }        private bool IsPresice()        {            string precise = Form.ItemsForm["Presice"];            Form.ItemsForm.Remove("Presice");            if (string.IsNullOrEmpty(precise))            {                return false;            }            if (precise.Equals("1"))            {                return false;            }            return true;        }        private void IsPresice(string itemForm, string value)        {            if (itemForm.EndsWith("__jq"))            {                SqlQuery.And(itemForm.Remove(itemForm.Length - 4, 4)).IsEqualTo(value);                loadedFlag = true;            }        }        private void IsEqualTo(string itemForm, string value)        {            SqlQuery.And(itemForm).IsEqualTo(value);        }        private void IsLike(string itemForm, string value)        {            SqlQuery.And(itemForm).Like("%" + value + "%");        }        private void IsCurrentPage(string itemForm, string value)        {            if (itemForm.Equals("page"))            {                int result;                if (int.TryParse(value, out result))                {                    CurrentPage = result;                    loadedFlag = true;                }            }        }        private void IsPageSize(string itemForm, string value)        {            if (itemForm.Equals("rows"))            {                int result;                if (int.TryParse(value, out result))                {                    PageSize = result;                    loadedFlag = true;                }            }        }        private void IsDateStart(string itemForm, string value)        {            if (itemForm.EndsWith("__ds"))            {                SqlQuery.And(itemForm.Remove(itemForm.Length - 4, 4)).IsGreaterThanOrEqualTo(value);                loadedFlag = true;            }        }        private void IsDateEnd(string itemForm, string value)        {            if (itemForm.EndsWith("__de"))            {                SqlQuery.And(itemForm.Remove(itemForm.Length - 4, 4)).IsLessThanOrEqualTo(value);                loadedFlag = true;            }        }    }}


    9.使用方法:

    1).前台页面以表单(Form)形式提交页面时一般处理程序(.ashx)或后台页面(.cs)接收页面将接收到的Context.Request.Form传给该方法即可直接保存或获取详细。

    2).表单必须与实体类属性名称一致,可加后缀“__jq”(精确查找)、“__ds” (日期开始)、“__de”(日期结束)等来标注相应查询方式。

    3).“Presice”为是否精确查询。


    欢迎各位批评指点。

0 0