识别表单为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
- 识别表单为Subsonic实体(适合于easyui)
- subsonic
- (札记)EasyUI Form表单
- EasyUI表单验证(扩展)
- EasyUI(五)表单验证
- 让SubSonic生成实体类自动加注释
- EasyUI 表单
- easyUI表单
- OpenNLP进行中文命名实体识别(下:载入模型识别实体)
- 为SubSonic3.0的查询(SubSonic.Query.Select和存储过程)添加更多的执行功能
- 列表自定义表单(easyui+cookie)
- easyui表单验证easyui-validatebox
- 命名实体识别
- 命名实体识别
- 中文命名实体识别
- 命名实体识别NER
- NLTK命名实体识别
- 命名实体识别
- 三星手机官方ROM下载器图文教程
- Android Drawable、Bitmap、Canvas和Paint的区别
- Linux makefile 教程 非常详细,且易懂
- python 操作excel2007
- Visual Studio 常用快捷键
- 识别表单为Subsonic实体(适合于easyui)
- 编程的四种境界
- ModelSim仿真
- 八核版三星Galaxy S4(I9500)root教程
- IOS中KVO模式的解析与应用
- (转) “作为函数参数的二维数组”即…
- 可能会用上的一些效果。
- android硬件加速器及其问题小结
- App Inventor Blocks Editor 打不开问题