函数计算已终止 好像是封装问题 求大神解答
自己封装的第基类:
- C# code
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;using System.Collections;using BLL;namespace Model{ /// <summary> /// 其他模板类的基类 /// 通过GUID实例化 将调用DAL 会进行数据库访问 从何获取一个DATATABLE赋值 /// 通过DATAROW实例化无需数据库访问 会循环以列名 值 的格式存入HashTable(Ht) /// 无参数实例化 /// 索引器接收STRING类型参数 作为HT的KEY 取值 /// /// 创建时间:2011年8月29日10:31:03 /// </summary> public class ObjectData : Object { #region 变量属性 string guid = string.Empty; //GUID public string Guid { get { return guid; } set { guid = value; } } string name = string.Empty; //Name public string Name { get { return name; } set { name = value; } } int dataState = 0; //数据状态 public int DataState { get { return dataState; } set { dataState = value; } } Hashtable ht = new Hashtable(); //字段集合 public Hashtable Ht { get { return ht; } set { ht = value; } } DateTime _CreateTime; //数据创建时间 public DateTime CreateTime { get { return _CreateTime; } } #endregion #region 构造函数和索引器 //索引器 public virtual object this[string Key] { get { return ht[Key]; } } //无参数实例化 public ObjectData() : base() { } //GUID 表名实例化 /// <summary> /// 基本所有数据都有GUID 所以 接收一个GUID 一个TABLENAME /// </summary> /// <param name="guid"></param> /// <param name="TableName"></param> public ObjectData(string guid, string TableName) : base() { } //数据行实例化 /// <summary> /// 根据DataRow生成 /// </summary> /// <param name="dr"></param> public ObjectData(DataRow dr) { FillData(dr); } #endregion #region 方法 public override string ToString() { return name; } //判断是否相等 /// <summary> /// 检查是否相等 /// </summary> /// <param name="guid">传入了一个guid</param> /// <returns>返回结果</returns> public virtual bool Equals(string guid) { if (this.guid == guid) return true; return false; } public virtual bool Equals(ObjectData obj) { if (this.guid == obj.guid) return true; return false; } //存入数据 /// <summary> /// 填充数据用 /// </summary> /// <param name="dt"></param> public virtual void FillData(DataRow dt) { foreach (DataColumn dc in dt.Table.Columns) { switch (dc.ColumnName.ToLower()) { case "name": this.Name = dt[dc.ColumnName].ToString(); break; case "guid": this.Guid = dt[dc.ColumnName].ToString(); break; case "createtime": this._CreateTime = DateTime.Parse(dt[dc.ColumnName].ToString()); break; } ht.Add(dc.ColumnName, dt[dc.ColumnName].ToString()); } } //实例化Item实例 public virtual void FillItem(DataTable dt) { throw new Exception("FillItem没有得到重写"); } #endregion }}
这是 继承自基类的一个派生类
- C# code
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;namespace Model{ public class UrbanAreasInfo : ObjectData { #region 变量 属性 int? _ID = null; //市区ID public int? ID { get { return ID; } } string _Memo = string.Empty; //备注 public string Memo { get { return _Memo; } } CommunityInfo[] _Item; //小区下楼盘 public CommunityInfo[] Items { get { return _Item; } } #endregion #region 构造函数 索引 public UrbanAreasInfo() : base() { } public UrbanAreasInfo(string guid) : base(guid, "UrbanAreas") { _ID = Int32.Parse(this.Ht["UrbanAreasID"].ToString()); _Memo = this.Ht["Memo"].ToString(); } public UrbanAreasInfo(DataRow dr) : base(dr) { _ID = Int32.Parse(this.Ht["UrbanAreasID"].ToString()); _Memo = this.Ht["Memo"].ToString(); } #endregion #region 方法 public override void FillItem(DataTable dt) { _Item = new CommunityInfo[dt.Rows.Count]; int _Index = 0; foreach (DataRow dr in dt.Select("guid = '"+this.Guid+"'")) { _Item[_Index] = new CommunityInfo(dr); } } #endregion }}
这是 出错时候的方法体
- C# code
private void FillTreeView() { treeView1.Nodes.Clear(); UrArray = new List<UrbanAreasInfo>(); TreeNode All = new TreeNode("全部"); hd = new HouseDocument(); hd.FillThisOfTableName("UrbanAreas"); hd.FillThisOfTableName("Community"); hd.FillThisOfTableName("CommunityDetailsPosition");; for (int i = 0; i < hd.Ds.Tables[0].Rows.Count; i++) { UrbanAreasInfo xx = new UrbanAreasInfo(hd.Ds.Tables[0].Rows[i]); UrArray.Add(new UrbanAreasInfo(hd.Ds.Tables[0].Rows[i])); UrArray[i].FillItem(hd.Ds.Tables[1]); foreach(CommunityInfo com in UrArray[i].Items) { com.FillItem(hd.Ds.Tables[2]); } } foreach(UrbanAreasInfo urinfo in UrArray) { TreeNode UrNode = new TreeNode(urinfo.Name); CommunityInfo[] Item = urinfo.Items; foreach(CommunityInfo com in Item) { TreeNode comNode = new TreeNode(com.Name); CommunityDetails[] ComItem = com.Items; foreach(CommunityDetails comdNode in ComItem) { comNode.Nodes.Add(new TreeNode(comdNode.Name)); } UrNode.Nodes.Add(comNode); } All.Nodes.Add(UrNode); } treeView1.Nodes.Add(All); }
调试后 监视用DataRow实例化后的UrbanAreasInfo 对象 一打开那个字段的菜单 里面有个红色叹号 后面写着 函数计算已终止 求解 为何啊 哪里的问题~~
[解决办法]
int? _ID = null; //市区ID
public int? ID
{
get { return ID; }
}
这个是死循环!!!
应该这样写
int? _ID = null; //市区ID
public int? ID
{
get { return _ID; }
}