您的位置:首页 > 移动开发 > Objective-C

Object/DataSet Relational Mapping

2007-01-07 13:43 323 查看
一 问题提出
1.DataSet中DataRow只能以DataTable[0].Rows[0][“Name”]的方式获取数据
2.Sql配置的不动态,不清晰的Sql拼凑
3.使用JAVA 的ORM设计.Net,使用对象层,每一次修改都将影响反射的对象。
那么请继续看下面的文章
[align=center]Object/DataSet Relational Mapping[/align]
[align=center](对象/数据集关系映射)[/align]
NickLee.ODRM模式可以很好的解决以上问题
1.DataSet中DataRow只能以DataTable[0].Rows[0][“Name”]的方式获取数据
方案:DataRow转化为序列化对象,但序列化对象只作为清晰的对象操作实体处理业务判断和数据
2.Sql配置的不动态,不清晰的Sql拼凑
方案:采用IBatisNet数据层构架,采用IBatisNet动态的SQL语法,但返回DataSet
3.使用JAVA 的ORM设计.Net,使用对象层,每一次修改都将影响反射的对象。
方案:清晰的O(对象层),无反射机制,避免每一次修改对对象层的改动。
下面做详细的说明
以下代码演示将包含在NickLee.Framework.2.0.1.2以上版本中,当然,我们只是提供一种思想,灵活的方案,仅代表TheFallAngel团队的思想。
必须引用的dll
IBatisNet(Version 1.5及其以后) with NickLee.Framework修改版本
NickLee.Web.UI(Version 2006.2.1447及其以后版本)
1. cXTM_User.cs
[align=left]using System;[/align]
[align=left]using System.Data;[/align]
[align=left]using System.Configuration;[/align]
[align=left]using System.Web;[/align]
[align=left]using System.Web.Security;[/align]
[align=left]using System.Web.UI;[/align]
[align=left]using System.Web.UI.WebControls;[/align]
[align=left]using System.Web.UI.WebControls.WebParts;[/align]
[align=left]using System.Web.UI.HtmlControls;[/align]
[align=left] [/align]
[align=left]///<summary>[/align]
[align=left]/// cXTM_User.序列化[/align]
[align=left]///</summary>[/align]
[align=left][Serializable][/align]
[align=left]public class cXTM_User[/align]
[align=left]{[/align]
[align=left] private int _dID;[/align]
[align=left] private string _userName;[/align]
[align=left] public cXTM_User()[/align]
[align=left] {[/align]
[align=left] //[/align]
[align=left] // TODO: 在此处添加构造函数逻辑[/align]
[align=left] //[/align]
[align=left] }[/align]
[align=left] public int DID[/align]
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
[align=left] return _dID;[/align]
[align=left] }[/align]
[align=left] set[/align]
[align=left] {[/align]
[align=left] _dID = value;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] public string UserName[/align]
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
[align=left] return _userName;[/align]
[align=left] }[/align]
[align=left] set[/align]
[align=left] {[/align]
[align=left] _userName = value;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] ///<summary>[/align]
[align=left] /// Propertylist中数组请定义该类中属性,并确保名称唯一性[/align]
[align=left] ///以及与XTM_User中SelectXTM_UserByKey_Test中查询名称统一[/align]
[align=left] ///</summary>[/align]
[align=left] public string[] Propertylist[/align]
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
[align=left] return new string[] { "UserName", "DID" };[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
2. XTM_User.xml
[align=left]<?xmlversion='1.0'encoding='UTF-8' ?>[/align]
[align=left]<sqlMapnamespace='XTM_User'xmlns="http://ibatis.apache.org/mapping"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">[/align]
[align=left]<statements>[/align]
[align=left] <selectid='SelectXTM_UserByKey_Test'parameterClass='System.Collections.Hashtable'>[/align]
[align=left] SELECT[/align]
[align=left] Top 5[/align]
[align=left] [DID],[/align]
[align=left] [UserName],[/align]
[align=left] [LoginName],[/align]
[align=left] [PWD],[/align]
[align=left] [LoginFlag],[/align]
[align=left] [StopFlag],[/align]
[align=left] [LoginTime],[/align]
[align=left] [LASTUPDATE][/align]
[align=left] FROM [XTM_User][/align]
[align=left] </select>[/align]
[align=left]</statements>[/align]
[align=left]</sqlMap>[/align]

3. test.aspx
[align=left]<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="ODRM_test" %>[/align]
[align=left]<%@ Register Assembly="NickLee.Web.UI" Namespace="NickLee.Web.UI" TagPrefix="NickLee" %>[/align]
[align=left]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">[/align]
[align=left]<html xmlns="http://www.w3.org/1999/xhtml" >[/align]
[align=left]<head runat="server">[/align]
[align=left] <title>Object/DataSet Relational Mapping(对象/数据集关系映射)</title>[/align]
[align=left]</head>[/align]
[align=left]<body>[/align]
[align=left] <form id="form1" runat="server">[/align]
[align=left] <div>[/align]
[align=left] <NickLee:ExDataGrid ID="ExDataGrid1" runat="server" OnItemDataBound="ExDataGrid1_ItemDataBound">[/align]
[align=left] </NickLee:ExDataGrid></div>[/align]
[align=left] </form>[/align]
[align=left]</body>[/align]
[align=left]</html>[/align]
4. test.aspx.cs
[align=left]using System;[/align]
[align=left]using System.Data;[/align]
[align=left]using System.Configuration;[/align]
[align=left]using System.Collections;[/align]
[align=left]using System.Web;[/align]
[align=left]using System.Web.Security;[/align]
[align=left]using System.Web.UI;[/align]
[align=left]using System.Web.UI.WebControls;[/align]
[align=left]using System.Web.UI.WebControls.WebParts;[/align]
[align=left]using System.Web.UI.HtmlControls;[/align]
[align=left] [/align]
[align=left]using IBatisNet.DataMapper;[/align]
[align=left]using System.Reflection;[/align]
[align=left] [/align]
[align=left]///<summary>[/align]
[align=left]/// Object/DataSet Relational Mapping(对象/数据集关系映射)[/align]
[align=left]/// ODRM为结合ORM与DataSet,并自动根据O和DataSet生成对象,以便业务层处理[/align]
[align=left]///</summary>[/align]
[align=left]public partial class ODRM_test : PageBase[/align]
[align=left]{[/align]
[align=left] protected void Page_Load(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] if (!IsPostBack)[/align]
[align=left] {[/align]
[align=left] DataSet set11 = Mapper.Instance().QueryForDataSet("SelectXTM_UserByKey_Test",UIhashtable);[/align]
[align=left] DataTable table1 = ConvertDataTable(set11, "");[/align]
[align=left] //这里为自己定义的序列化类[/align]
[align=left] cXTM_User[] objModel = new cXTM_User[table1.Rows.Count];[/align]
[align=left] //DataTable转化为序列化类数组[/align]
[align=left] for (int y = 0; y < table1.Rows.Count; y++)[/align]
[align=left] {[/align]
[align=left] objModel[y] = new cXTM_User();[/align]
[align=left] DataTableConvertObject(table1.Rows[y], objModel[y]); [/align]
[align=left] }[/align]
[align=left] //以DataSet模式绑定[/align]
[align=left] ExDataGrid1.DataSource = table1;[/align]
[align=left] //以序列化对象模式绑定[/align]
[align=left] //ExDataGrid1.DataSource = objModel;[/align]
[align=left] ExDataGrid1.DataBind();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] protected void ExDataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)[/align]
[align=left] {[/align]
[align=left] /*[/align]
[align=left] * 该部分应用范围[/align]
[align=left] * 查询一条数据的修改,可以用objModel.UserName[/align]
[align=left] * 而不必再使用DataTable[0].Rows[0]["UserName"]的模式[/align]
[align=left] * 提高面向对象的程度,并减少业务流程部分编码[/align]
[align=left] */[/align]
[align=left] [/align]
[align=left] if (e.Item.ItemIndex != -1)[/align]
[align=left] {[/align]
[align=left] cXTM_User objModel = new cXTM_User();[/align]
[align=left] [/align]
[align=left] //如果为DataSet填充的DataGrid[/align]
[align=left] if (e.Item.DataItem.GetType().FullName == "System.Data.DataRowView")[/align]
[align=left] {[/align]
[align=left] DataTableConvertObject((DataRow)((DataRowView)e.Item.DataItem).Row, objModel); [/align]
[align=left] }[/align]
[align=left] //否则认为为序列化对象填充[/align]
[align=left] else [/align]
[align=left] {[/align]
[align=left] objModel = (cXTM_User)e.Item.DataItem; [/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] #region 指定对象函数[/align]
[align=left] ///<summary>[/align]
[align=left] ///数据集中一行DataRow转换为指定对象,并填充数据[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="row">数据集中一行</param>[/align]
[align=left] ///<param name="objModel">指定对象</param>[/align]
[align=left] private void DataTableConvertObject(DataRow row, cXTM_User objModel)[/align]
[align=left] {[/align]
[align=left] Hashtable hTable = new Hashtable();[/align]
[align=left] hTable = DataRowConvertHashtable(row);[/align]
[align=left] Type entitytype = Type.GetType(objModel.GetType().AssemblyQualifiedName);[/align]
[align=left] [/align]
[align=left] for (int j = 0; j < objModel.Propertylist.Length; j++)[/align]
[align=left] {[/align]
[align=left] PropertyInfo propertyinfo = entitytype.GetProperty(objModel.Propertylist[j]);[/align]
[align=left] propertyinfo.SetValue(objModel, hTable[objModel.Propertylist[j]], null);[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///对象转换为哈希表[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="objModel">有数据的对象</param>[/align]
[align=left] ///<returns>填充数据后的哈希表</returns>[/align]
[align=left] public Hashtable ObjectConvertHashtable(cXTM_User objModel)[/align]
[align=left] {[/align]
[align=left] Hashtable hTable = new Hashtable();[/align]
[align=left] Type entitytype = Type.GetType(objModel.GetType().AssemblyQualifiedName);[/align]
[align=left] for (int j = 0; j < objModel.Propertylist.Length; j++)[/align]
[align=left] {[/align]
[align=left] PropertyInfo propertyinfo = entitytype.GetProperty(objModel.Propertylist[j]);[/align]
[align=left] hTable.Add(objModel.Propertylist[j], propertyinfo.GetValue(objModel, null));[/align]
[align=left] }[/align]
[align=left] return hTable;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///对象转换为DataTable,并有单行DataRow[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="objModel">有数据的对象</param>[/align]
[align=left] ///<returns></returns>[/align]
[align=left] public DataTable ObjectConvertDataTableWidthRow(cXTM_User objModel)[/align]
[align=left] {[/align]
[align=left] return ObjectConvertDataTableWidthRow(objModel, "");[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///对象转换为DataTable,并有单行DataRow[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="objModel">有数据的对象</param>[/align]
[align=left] ///<returns></returns>[/align]
[align=left] public DataTable ObjectConvertDataTableWidthRow(cXTM_User objModel, string DataMember)[/align]
[align=left] {[/align]
[align=left] Type entitytype = Type.GetType(objModel.GetType().AssemblyQualifiedName);[/align]
[align=left] DataTable dt = new DataTable();[/align]
[align=left] if (DataMember != "")[/align]
[align=left] {[/align]
[align=left] dt = new DataTable(DataMember);[/align]
[align=left] }[/align]
[align=left] dt.Columns.Clear();[/align]
[align=left] for (int j = 0; j < objModel.Propertylist.Length; j++)[/align]
[align=left] {[/align]
[align=left] PropertyInfo propertyinfo = entitytype.GetProperty(objModel.Propertylist[j]);[/align]
[align=left] dt.Columns.Add(new DataColumn(objModel.Propertylist[j], propertyinfo.GetType()));[/align]
[align=left] }[/align]
[align=left] DataRow row = dt.NewRow();[/align]
[align=left] for (int j = 0; j < objModel.Propertylist.Length; j++)[/align]
[align=left] {[/align]
[align=left] PropertyInfo propertyinfo = entitytype.GetProperty(objModel.Propertylist[j]);[/align]
[align=left] row[objModel.Propertylist[j]] = propertyinfo.GetValue(objModel, null);[/align]
[align=left] }[/align]
[align=left] dt.Rows.Add(row);[/align]
[align=left] [/align]
[align=left] return dt;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///对象转换为DataTable,并有多行DataRow[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="objModel">有数据的对象</param>[/align]
[align=left] ///<returns></returns>[/align]
[align=left] public DataTable ObjectConvertDataTableWidthRows(cXTM_User[] objModel)[/align]
[align=left] {[/align]
[align=left] return ObjectConvertDataTableWidthRows(objModel, "");[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///对象转换为DataTable,并有多行DataRow[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="objModel">有数据的对象</param>[/align]
[align=left] ///<returns></returns>[/align]
[align=left] public DataTable ObjectConvertDataTableWidthRows(cXTM_User[] objModel, string DataMember)[/align]
[align=left] {[/align]
[align=left] Type entitytype = Type.GetType(objModel.GetType().AssemblyQualifiedName);[/align]
[align=left] DataTable dt = new DataTable();[/align]
[align=left] if (DataMember != "")[/align]
[align=left] {[/align]
[align=left] dt = new DataTable(DataMember);[/align]
[align=left] }[/align]
[align=left] if (objModel.Length == 0)[/align]
[align=left] {[/align]
[align=left] return dt;[/align]
[align=left] }[/align]
[align=left] dt.Columns.Clear();[/align]
[align=left] for (int j = 0; j < objModel[0].Propertylist.Length; j++)[/align]
[align=left] {[/align]
[align=left] PropertyInfo propertyinfo = entitytype.GetProperty(objModel[0].Propertylist[j]);[/align]
[align=left] dt.Columns.Add(new DataColumn(objModel[0].Propertylist[j], propertyinfo.GetType()));[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] for (int i = 0; i < objModel.Length; i++)[/align]
[align=left] {[/align]
[align=left] DataRow row = dt.NewRow();[/align]
[align=left] for (int j = 0; j < objModel[i].Propertylist.Length; j++)[/align]
[align=left] {[/align]
[align=left] PropertyInfo propertyinfo = entitytype.GetProperty(objModel[i].Propertylist[j]);[/align]
[align=left] row[objModel[i].Propertylist[j]] = propertyinfo.GetValue(objModel[i], null);[/align]
[align=left] }[/align]
[align=left] dt.Rows.Add(row);[/align]
[align=left] }[/align]
[align=left] return dt;[/align]
[align=left] }[/align]
[align=left] #endregion[/align]
[align=left] [/align]
[align=left] #region 通用函数[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///转换为DataTable[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="Source">数据源</param>[/align]
[align=left] ///<param name="DataMember">数据表名称</param>[/align]
[align=left] public static DataTable ConvertDataTable(object Source, string DataMember)[/align]
[align=left] {[/align]
[align=left] DataTable baseTable = new DataTable();[/align]
[align=left] if (Source is DataTable)[/align]
[align=left] {[/align]
[align=left] baseTable = (DataTable)Source;[/align]
[align=left] return baseTable;[/align]
[align=left] }[/align]
[align=left] if (Source is DataSet)[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] DataSet set1 = (DataSet)Source;[/align]
[align=left] if ((set1.Tables.Count > 1) && ((DataMember == null) || (DataMember == "")))[/align]
[align=left] {[/align]
[align=left] throw new Exception("If there is more than one table in your dataset, you must define the DataMember property to specify which table to use.");[/align]
[align=left] }[/align]
[align=left] if (set1.Tables.Count < 1)[/align]
[align=left] {[/align]
[align=left] throw new Exception("There are no tables in the datasource.");[/align]
[align=left] }[/align]
[align=left] if ((DataMember != null) && (DataMember != ""))[/align]
[align=left] {[/align]
[align=left] baseTable = set1.Tables[DataMember];[/align]
[align=left] return baseTable;[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] baseTable = set1.Tables[0];[/align]
[align=left] return baseTable;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] return baseTable;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///返回DataTable为哈希表键值对[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="SourceTable">数据行对象</param>[/align]
[align=left] ///<returns>填充后哈希表</returns>[/align]
[align=left] public static Hashtable DataRowConvertHashtable(DataRow SourceRow)[/align]
[align=left] {[/align]
[align=left] Hashtable hTable = new Hashtable();[/align]
[align=left] IList list = SourceRow.ItemArray;[/align]
[align=left] object[] tObj = new object[SourceRow.Table.Columns.Count];[/align]
[align=left] [/align]
[align=left] for (int i = 0; i < SourceRow.Table.Columns.Count; i++)[/align]
[align=left] {[/align]
[align=left] tObj[SourceRow.Table.Columns.IndexOf(SourceRow.Table.Columns[i].ColumnName)] = SourceRow.Table.Columns[i].ColumnName;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] for (int x = 0; x < list.Count; x++)[/align]
[align=left] {[/align]
[align=left] hTable.Add(tObj[x].ToString(), list[x]);[/align]
[align=left] }[/align]
[align=left] return hTable;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] #endregion[/align]
[align=left] [/align]
[align=left]}[/align]

5. PageBase.cs
[align=left]using System;[/align]
[align=left]using System.Data;[/align]
[align=left]using System.Configuration;[/align]
[align=left]using System.Web;[/align]
[align=left]using System.Web.Security;[/align]
[align=left]using System.Web.UI;[/align]
[align=left]using System.Web.UI.WebControls;[/align]
[align=left]using System.Web.UI.WebControls.WebParts;[/align]
[align=left]using System.Web.UI.HtmlControls;[/align]
[align=left] [/align]
[align=left]using System.Reflection;[/align]
[align=left]using System.Text;[/align]
[align=left]using System.Collections;[/align]
[align=left] [/align]
[align=left]//namespace可要可不要[/align]
[align=left]//namespace Framework.Web.UIProcess[/align]
[align=left]//{[/align]
[align=left]///<summary>[/align]
[align=left]/// PageBase 的摘要说明[/align]
[align=left]///</summary>[/align]
[align=left]///<summary>[/align]
[align=left]///页面层(表示层)基类,所有页面继承该页面[/align]
[align=left]///</summary>[/align]
[align=left] public class PageBase : System.Web.UI.Page[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] #region整个系统存在部分[/align]
[align=left] private string _baseselect;[/align]
[align=left] ///<summary>[/align]
[align=left] ///查询字段[/align]
[align=left] ///</summary>[/align]
[align=left] protected string baseselect[/align]
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
[align=left] // TODO: 添加 BaseRule.OperationCode getter 实现[/align]
[align=left] return _baseselect;[/align]
[align=left] }[/align]
[align=left] set[/align]
[align=left] {[/align]
[align=left] // TODO: 添加 BaseRule.OperationCode setter 实现[/align]
[align=left] _baseselect = value;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] ///<summary>[/align]
[align=left] ///基类哈希表,在整个系统中存在[/align]
[align=left] ///</summary>[/align]
[align=left] protected Hashtable baseHashtable = new Hashtable();[/align]
[align=left] ///<summary>[/align]
[align=left] ///界面哈希表,获取UI工厂获取的控件和控件值[/align]
[align=left] ///</summary>[/align]
[align=left] protected Hashtable UIhashtable = new Hashtable();[/align]
[align=left] ///<summary>[/align]
[align=left] ///出错提示,默认值""[/align]
[align=left] ///</summary>[/align]
[align=left] protected string errMsg = "";[/align]
[align=left] ///<summary>[/align]
[align=left] ///出错状态,默认值false[/align]
[align=left] ///</summary>[/align]
[align=left] protected bool errState = false;[/align]
[align=left] ///<summary>[/align]
[align=left] ///私有变量_UISet[/align]
[align=left] ///</summary>[/align]
[align=left] private DataSet _UISet = new DataSet();[/align]
[align=left] ///<summary>[/align]
[align=left] ///界面层数据集[/align]
[align=left] ///</summary>[/align]
[align=left] protected DataSet UISet[/align]
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
[align=left] // TODO: 添加 BaseRule.OperationCode getter 实现[/align]
[align=left] return _UISet;[/align]
[align=left] }[/align]
[align=left] set[/align]
[align=left] {[/align]
[align=left] // TODO: 添加 BaseRule.OperationCode setter 实现[/align]
[align=left] _UISet = value;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] private DataTable _UITable = new DataTable();[/align]
[align=left] ///<summary>[/align]
[align=left] ///界面层数据表[/align]
[align=left] ///</summary>[/align]
[align=left] protected DataTable UITable[/align]
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
[align=left] // TODO: 添加 BaseRule.OperationCode getter 实现[/align]
[align=left] return _UITable;[/align]
[align=left] }[/align]
[align=left] set[/align]
[align=left] {[/align]
[align=left] // TODO: 添加 BaseRule.OperationCode setter 实现[/align]
[align=left] _UITable = value;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private string _pageTitle = "";[/align]
[align=left] ///<summary>[/align]
[align=left] ///页面标题[/align]
[align=left] ///</summary>[/align]
[align=left] protected string pageTitle[/align]
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
[align=left] // TODO: 添加 BaseRule.OperationCode getter 实现[/align]
[align=left] return _pageTitle;[/align]
[align=left] }[/align]
[align=left] set[/align]
[align=left] {[/align]
[align=left] // TODO: 添加 BaseRule.OperationCode setter 实现[/align]
[align=left] _pageTitle = value;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] #endregion[/align]
[align=left] [/align]
[align=left] #region查询页面存在部分[/align]
[align=left] ///<summary>[/align]
[align=left] /// List页面基类哈希表[/align]
[align=left] ///</summary>[/align]
[align=left] protected Hashtable baseListHashtable = new Hashtable();[/align]
[align=left] ///<summary>[/align]
[align=left] ///页面总数.变量.1000w、10000w数据集使用[/align]
[align=left] ///</summary>[/align]
[align=left] protected int pageCount;[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///记录总数.变量.1000w、10000w数据集使用[/align]
[align=left] ///</summary>[/align]
[align=left] protected int recordCount;[/align]
[align=left] ///<summary>[/align]
[align=left] ///记录总数.属性.1000w、10000w数据集使用[/align]
[align=left] ///</summary>[/align]
[align=left] protected int RecordCount[/align]
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
[align=left] return recordCount;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] #endregion[/align]
[align=left] [/align]
[align=left] #region编辑页面存在部分[/align]
[align=left] ///<summary>[/align]
[align=left] /// Edit页面基类哈希表[/align]
[align=left] ///</summary>[/align]
[align=left] protected Hashtable baseEditHashtable = new Hashtable();[/align]
[align=left] ///<summary>[/align]
[align=left] /// Edit页面,编辑数据哈希表[/align]
[align=left] ///</summary>[/align]
[align=left] protected Hashtable baseEditFillHashtable = new Hashtable();[/align]
[align=left] #endregion[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///构造函数[/align]
[align=left] ///</summary>[/align]
[align=left] public PageBase()[/align]
[align=left] {[/align]
[align=left] this.Load += new EventHandler(PageBase_Load);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void PageBase_Load(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] if (!Page.IsPostBack)[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] //整个流程需要的控制部分[/align]
[align=left] if (Session["baseHashtable"] != null)[/align]
[align=left] {[/align]
[align=left] //从Session中获取哈希对象列表[/align]
[align=left] baseHashtable = (Hashtable)Session["baseHashtable"];[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //编辑页面访问权限和访问控制,只在第一次载入页面的时候有效[/align]
[align=left] if (Session["baseEditHashtable"] != null)[/align]
[align=left] {[/align]
[align=left] //获取Edit页面哈希对象列表[/align]
[align=left] baseEditHashtable = (Hashtable)Session["baseEditHashtable"];[/align]
[align=left] //获取完后释放对应Session对象[/align]
[align=left] Session.Remove("baseEditHashtable");[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] //如果为初始状态,新增是否安全编辑状态值,默认值false,不安全[/align]
[align=left] baseEditHashtable.Add("EditSafeState", false);[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //查询页面访问控制[/align]
[align=left] if (Session["baseListHashtable"] != null)[/align]
[align=left] {[/align]
[align=left] //获取Edit页面哈希对象列表[/align]
[align=left] baseListHashtable = (Hashtable)Session["baseListHashtable"];[/align]
[align=left] //获取完后释放对应Session对象[/align]
[align=left] Session.Remove("baseListHashtable");[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] //如果为初始状态,新增是否刷新查询页面,默认值false,不刷新[/align]
[align=left] baseListHashtable.Add("IsRefresh", false);[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] #region UI通用函数[/align]
[align=left] ///<summary>[/align]
[align=left] ///抛出出错消息提示[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="page">页面</param>[/align]
[align=left] ///<param name="errMsg">出错消息</param>[/align]
[align=left] protected void throwErrMsg(Page page, string errMsg)[/align]
[align=left] {[/align]
[align=left] page.Response.Write("<script>window.alert(/"" + errMsg.Replace("/"", "'") + "/");</script>");[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///刷新打开编辑窗体的List页面[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="page">页面</param>[/align]
[align=left] protected void parentPageRefresh(Page page)[/align]
[align=left] {[/align]
[align=left] StringBuilder scriptString = new StringBuilder();[/align]
[align=left] scriptString.Append("<script language = javascript>");[/align]
[align=left] //调用Function.js中的refresh()刷新父窗体[/align]
[align=left] scriptString.Append("window.opener.refresh(false,/"/");");[/align]
[align=left] [/align]
[align=left] scriptString.Append(" window.focus();");[/align]
[align=left] scriptString.Append(" window.opener=null;");[/align]
[align=left] scriptString.Append(" window.close(); ");[/align]
[align=left] [/align]
[align=left] scriptString.Append("</" + "script>");[/align]
[align=left] page.Response.Write(scriptString.ToString());[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///重置页面[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="page">页面</param>[/align]
[align=left] protected void pageReset(Page page)[/align]
[align=left] {[/align]
[align=left] StringBuilder scriptString = new StringBuilder();[/align]
[align=left] scriptString.Append("<script language = javascript>");[/align]
[align=left] [/align]
[align=left] scriptString.Append(" this.location.reset(); ");[/align]
[align=left] [/align]
[align=left] scriptString.Append("</" + "script>");[/align]
[align=left] page.Response.Write(scriptString.ToString());[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] /// js界面工厂传入后生成Hashtable[/align]
[align=left] ///</summary>[/align]
[align=left] ///<param name="splitStr">js界面工厂传入字符串</param>[/align]
[align=left] ///<returns></returns>[/align]
[align=left] public Hashtable AjaxUIFactory(string splitStr)[/align]
[align=left] {[/align]
[align=left] string[] fristStr = splitStr.Split(',');[/align]
[align=left] Hashtable table = new Hashtable();[/align]
[align=left] for (int x = 0; x < fristStr.Length; x++)[/align]
[align=left] {[/align]
[align=left] string[] secondStr = fristStr[x].Split('|');[/align]
[align=left] if (secondStr.Length == 3)[/align]
[align=left] {[/align]
[align=left] //取截取后字符串和值[/align]
[align=left] table.Add(secondStr[1], secondStr[2]);[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] return table;[/align]
[align=left] }[/align]
[align=left] #endregion[/align]
[align=left]}[/align]
[align=left] [/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: