[原创]Object/DataSet Relational Mapping(对象/数据集关系映射)补充代码1

  1 None.gif using  System;
  2 None.gif using  System.Data;
  3 None.gif using  System.Configuration;
  4 None.gif using  System.Collections;
  5 None.gif using  System.Web;
  6 None.gif using  System.Web.Security;
  7 None.gif using  System.Web.UI;
  8 None.gif using  System.Web.UI.WebControls;
  9 None.gif using  System.Web.UI.WebControls.WebParts;
 10 None.gif using  System.Web.UI.HtmlControls;
 11 None.gif
 12 None.gif using  IBatisNet.DataMapper;
 13 None.gif using  System.Reflection;
 14 None.gif
 15 ExpandedBlockStart.gifContractedBlock.gif /**/ /// <summary>
 16InBlock.gif/// ODRM为结合ORM与DataSet,并自动根据O和DataSet生成对象,以便业务层处理
 17ExpandedBlockEnd.gif/// </summary>

 18 None.gif public  partial  class  ODRM_test : PageBase
 19 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 20InBlock.gif    protected void Page_Load(object sender, EventArgs e)
 21ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 22InBlock.gif        if (!IsPostBack)
 23ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 24InBlock.gif            DataSet set11 = Mapper.Instance().QueryForDataSet("SelectXTM_UserByKey_Test",UIhashtable);
 25InBlock.gif            DataTable table1 = ConvertDataTable(set11, "");
 26InBlock.gif            //这里为自己定义的序列化类
 27InBlock.gif            cXTM_User[] objModel = new cXTM_User[table1.Rows.Count];
 28InBlock.gif            //DataTable转化为序列化类数组
 29InBlock.gif            for (int y = 0; y < table1.Rows.Count; y++)
 30ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 31InBlock.gif                objModel[y] = new cXTM_User();
 32InBlock.gif                DataTableConvertObject(table1.Rows[y], objModel[y]); 
 33ExpandedSubBlockEnd.gif            }

 34InBlock.gif            //以DataSet模式绑定
 35InBlock.gif            ExDataGrid1.DataSource = table1;
 36InBlock.gif            //以序列化对象模式绑定
 37InBlock.gif            //ExDataGrid1.DataSource = objModel;
 38InBlock.gif            ExDataGrid1.DataBind();
 39ExpandedSubBlockEnd.gif        }

 40ExpandedSubBlockEnd.gif    }

 41InBlock.gif
 42InBlock.gif    protected void ExDataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
 43ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 44ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//*
 45InBlock.gif         * 该部分应用范围
 46InBlock.gif         * 查询一条数据的修改,可以用objModel.UserName
 47InBlock.gif         * 而不必再使用DataTable[0].Rows[0]["UserName"]的模式
 48InBlock.gif         * 提高面向对象的程度,并减少业务流程部分编码
 49ExpandedSubBlockEnd.gif         */

 50InBlock.gif
 51InBlock.gif        if (e.Item.ItemIndex != -1)
 52ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 53InBlock.gif            cXTM_User objModel = new cXTM_User();
 54InBlock.gif            
 55InBlock.gif            //如果为DataSet填充的DataGrid
 56InBlock.gif            if (e.Item.DataItem.GetType().FullName == "System.Data.DataRowView")
 57ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 58InBlock.gif                DataTableConvertObject((DataRow)((DataRowView)e.Item.DataItem).Row, objModel);      
 59ExpandedSubBlockEnd.gif            }

 60InBlock.gif            //否则认为为序列化对象填充
 61InBlock.gif            else 
 62ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 63InBlock.gif                objModel = (cXTM_User)e.Item.DataItem; 
 64InBlock.gif                   
 65ExpandedSubBlockEnd.gif            }

 66ExpandedSubBlockEnd.gif        }

 67ExpandedSubBlockEnd.gif    }

 68InBlock.gif
 69ContractedSubBlock.gifExpandedSubBlockStart.gif    指定对象函数#region 指定对象函数
 70ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
 71InBlock.gif    /// 数据集中一行DataRow转换为指定对象,并填充数据
 72InBlock.gif    /// </summary>
 73InBlock.gif    /// <param name="row">数据集中一行</param>
 74ExpandedSubBlockEnd.gif    /// <param name="objModel">指定对象</param>

 75InBlock.gif    private void DataTableConvertObject(DataRow row, cXTM_User objModel)
 76ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 77InBlock.gif        Hashtable hTable = new Hashtable();
 78InBlock.gif        hTable = DataRowConvertHashtable(row);
 79InBlock.gif        Type entitytype = Type.GetType(objModel.GetType().AssemblyQualifiedName);
 80InBlock.gif
 81InBlock.gif        for (int j = 0; j < objModel.Propertylist.Length; j++)
 82ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 83InBlock.gif            PropertyInfo propertyinfo = entitytype.GetProperty(objModel.Propertylist[j]);
 84InBlock.gif            propertyinfo.SetValue(objModel, hTable[objModel.Propertylist[j]], null);
 85ExpandedSubBlockEnd.gif        }

 86ExpandedSubBlockEnd.gif    }

 87InBlock.gif
 88ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
 89InBlock.gif    /// 对象转换为哈希表
 90InBlock.gif    /// </summary>
 91InBlock.gif    /// <param name="objModel">有数据的对象</param>
 92ExpandedSubBlockEnd.gif    /// <returns>填充数据后的哈希表</returns>

 93InBlock.gif    public Hashtable ObjectConvertHashtable(cXTM_User objModel)
 94ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 95InBlock.gif        Hashtable hTable = new Hashtable();
 96InBlock.gif        Type entitytype = Type.GetType(objModel.GetType().AssemblyQualifiedName);
 97InBlock.gif        for (int j = 0; j < objModel.Propertylist.Length; j++)
 98ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 99InBlock.gif            PropertyInfo propertyinfo = entitytype.GetProperty(objModel.Propertylist[j]);
100InBlock.gif            hTable.Add(objModel.Propertylist[j], propertyinfo.GetValue(objModel, null));
101ExpandedSubBlockEnd.gif        }

102InBlock.gif        return hTable;
103ExpandedSubBlockEnd.gif    }

104InBlock.gif
105ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
106InBlock.gif    /// 对象转换为DataTable,并有单行DataRow
107InBlock.gif    /// </summary>
108InBlock.gif    /// <param name="objModel">有数据的对象</param>
109ExpandedSubBlockEnd.gif    /// <returns></returns>

110InBlock.gif    public DataTable ObjectConvertDataTableWidthRow(cXTM_User objModel)
111ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
112InBlock.gif        return ObjectConvertDataTableWidthRow(objModel, "");
113ExpandedSubBlockEnd.gif    }

114InBlock.gif
115ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
116InBlock.gif    /// 对象转换为DataTable,并有单行DataRow
117InBlock.gif    /// </summary>
118InBlock.gif    /// <param name="objModel">有数据的对象</param>
119ExpandedSubBlockEnd.gif    /// <returns></returns>

120InBlock.gif    public DataTable ObjectConvertDataTableWidthRow(cXTM_User objModel, string DataMapper)
121ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
122InBlock.gif        Type entitytype = Type.GetType(objModel.GetType().AssemblyQualifiedName);
123InBlock.gif        DataTable dt = new DataTable();
124InBlock.gif        if (DataMapper != "")
125ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
126InBlock.gif            dt = new DataTable(DataMapper);
127ExpandedSubBlockEnd.gif        }

128InBlock.gif        dt.Columns.Clear();
129InBlock.gif        for (int j = 0; j < objModel.Propertylist.Length; j++)
130ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
131InBlock.gif            PropertyInfo propertyinfo = entitytype.GetProperty(objModel.Propertylist[j]);
132InBlock.gif            dt.Columns.Add(new DataColumn(objModel.Propertylist[j], propertyinfo.GetType()));
133ExpandedSubBlockEnd.gif        }

134InBlock.gif        DataRow row = dt.NewRow();
135InBlock.gif        for (int j = 0; j < objModel.Propertylist.Length; j++)
136ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
137InBlock.gif            PropertyInfo propertyinfo = entitytype.GetProperty(objModel.Propertylist[j]);
138InBlock.gif            row[objModel.Propertylist[j]] = propertyinfo.GetValue(objModel, null);
139ExpandedSubBlockEnd.gif        }

140InBlock.gif        dt.Rows.Add(row);
141InBlock.gif
142InBlock.gif        return dt;
143ExpandedSubBlockEnd.gif    }

144InBlock.gif
145ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
146InBlock.gif    /// 对象转换为DataTable,并有多行DataRow
147InBlock.gif    /// </summary>
148InBlock.gif    /// <param name="objModel">有数据的对象</param>
149ExpandedSubBlockEnd.gif    /// <returns></returns>

150InBlock.gif    public DataTable ObjectConvertDataTableWidthRows(cXTM_User[] objModel)
151ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
152InBlock.gif        return ObjectConvertDataTableWidthRows(objModel, "");
153ExpandedSubBlockEnd.gif    }

154InBlock.gif
155ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
156InBlock.gif    /// 对象转换为DataTable,并有多行DataRow
157InBlock.gif    /// </summary>
158InBlock.gif    /// <param name="objModel">有数据的对象</param>
159ExpandedSubBlockEnd.gif    /// <returns></returns>

160InBlock.gif    public DataTable ObjectConvertDataTableWidthRows(cXTM_User[] objModel, string DataMapper)
161ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
162InBlock.gif        Type entitytype = Type.GetType(objModel.GetType().AssemblyQualifiedName);
163InBlock.gif        DataTable dt = new DataTable();
164InBlock.gif        if (DataMapper != "")
165ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
166InBlock.gif            dt = new DataTable(DataMapper);
167ExpandedSubBlockEnd.gif        }

168InBlock.gif        if (objModel.Length == 0)
169ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
170InBlock.gif            return dt;
171ExpandedSubBlockEnd.gif        }

172InBlock.gif        dt.Columns.Clear();
173InBlock.gif        for (int j = 0; j < objModel[0].Propertylist.Length; j++)
174ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
175InBlock.gif            PropertyInfo propertyinfo = entitytype.GetProperty(objModel[0].Propertylist[j]);
176InBlock.gif            dt.Columns.Add(new DataColumn(objModel[0].Propertylist[j], propertyinfo.GetType()));
177ExpandedSubBlockEnd.gif        }

178InBlock.gif
179InBlock.gif        for (int i = 0; i < objModel.Length; i++)
180ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
181InBlock.gif            DataRow row = dt.NewRow();
182InBlock.gif            for (int j = 0; j < objModel[i].Propertylist.Length; j++)
183ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
184InBlock.gif                PropertyInfo propertyinfo = entitytype.GetProperty(objModel[i].Propertylist[j]);
185InBlock.gif                row[objModel[i].Propertylist[j]] = propertyinfo.GetValue(objModel[i], null);
186ExpandedSubBlockEnd.gif            }

187InBlock.gif            dt.Rows.Add(row);
188ExpandedSubBlockEnd.gif        }

189InBlock.gif        return dt;
190ExpandedSubBlockEnd.gif    }

191ExpandedSubBlockEnd.gif    #endregion

192InBlock.gif
193ContractedSubBlock.gifExpandedSubBlockStart.gif    通用函数#region 通用函数
194InBlock.gif
195ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
196InBlock.gif    /// 转换为DataTable
197InBlock.gif    /// </summary>
198InBlock.gif    /// <param name="Source">数据源</param>
199ExpandedSubBlockEnd.gif    /// <param name="DataMember">数据表名称</param>

200InBlock.gif    public static DataTable ConvertDataTable(object Source, string DataMember)
201ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
202InBlock.gif        DataTable baseTable = new DataTable();
203InBlock.gif        if (Source is DataTable)
204ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
205InBlock.gif            baseTable = (DataTable)Source;
206InBlock.gif            return baseTable;
207ExpandedSubBlockEnd.gif        }

208InBlock.gif        if (Source is DataSet)
209ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
210InBlock.gif
211InBlock.gif            DataSet set1 = (DataSet)Source;
212InBlock.gif            if ((set1.Tables.Count > 1&& ((DataMember == null|| (DataMember == "")))
213ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
214InBlock.gif                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.");
215ExpandedSubBlockEnd.gif            }

216InBlock.gif            if (set1.Tables.Count < 1)
217ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
218InBlock.gif                throw new Exception("There are no tables in the datasource.");
219ExpandedSubBlockEnd.gif            }

220InBlock.gif            if ((DataMember != null&& (DataMember != ""))
221ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
222InBlock.gif                baseTable = set1.Tables[DataMember];
223InBlock.gif                return baseTable;
224ExpandedSubBlockEnd.gif            }

225InBlock.gif            else
226ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
227InBlock.gif                baseTable = set1.Tables[0];
228InBlock.gif                return baseTable;
229ExpandedSubBlockEnd.gif            }

230InBlock.gif
231ExpandedSubBlockEnd.gif        }

232InBlock.gif        return baseTable;
233ExpandedSubBlockEnd.gif    }

234InBlock.gif
235ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
236InBlock.gif    /// 返回DataTable为哈希表键值对
237InBlock.gif    /// </summary>
238InBlock.gif    /// <param name="SourceTable">数据行对象</param>
239ExpandedSubBlockEnd.gif    /// <returns>填充后哈希表</returns>

240InBlock.gif    public static Hashtable DataRowConvertHashtable(DataRow SourceRow)
241ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
242InBlock.gif        Hashtable hTable = new Hashtable();
243InBlock.gif        IList list = SourceRow.ItemArray;
244InBlock.gif        object[] tObj = new object[SourceRow.Table.Columns.Count];
245InBlock.gif
246InBlock.gif        for (int i = 0; i < SourceRow.Table.Columns.Count; i++)
247ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
248InBlock.gif            tObj[SourceRow.Table.Columns.IndexOf(SourceRow.Table.Columns[i].ColumnName)] = SourceRow.Table.Columns[i].ColumnName;
249ExpandedSubBlockEnd.gif        }

250InBlock.gif
251InBlock.gif        for (int x = 0; x < list.Count; x++)
252ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
253InBlock.gif            hTable.Add(tObj[x].ToString(), list[x]);
254ExpandedSubBlockEnd.gif        }

255InBlock.gif        return hTable;
256ExpandedSubBlockEnd.gif    }

257InBlock.gif
258ExpandedSubBlockEnd.gif    #endregion

259InBlock.gif
260InBlock.gif
261InBlock.gif
262InBlock.gif
263ExpandedBlockEnd.gif}

264 None.gif

转载于:https://www.cnblogs.com/mail-ricklee/archive/2006/12/01/579391.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值