📄 abstractrecord.cs
字号:
props.Add(string.Format("{0}:{1}", col.Name, val)); break; case JSON.Type.Array: props.Add(string.Format("{0}", val)); break; } } return open + Util.Join(props) + close; } protected bool loading = false; public static T LoadFromDataRow<T>(DataRow row) where T : AbstractRecord, new() { ColumnInfo[] fields = ColumnInfoManager.RequestColumns<T>(); T r = new T(); r.loading = true; r.id = Convert.ToInt32(row["ROWID"]); foreach (ColumnInfo fi in fields) { if (fi.DataType != DataType.RecordList) { if (row.Table.Columns.Contains(fi.Name)) { if (fi.DataType == DataType.RecordSelect && (row[fi.Name] is int && (int)row[fi.Name] == r.id)) { r[fi.Name] = r; } else { r[fi.Name] = PropertyConverter.Convert(row[fi.Name], fi.Type); } } } else { try { MethodInfo mi = typeof(T).GetMethod("LoadChildren", BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(ColumnInfo) }, null); mi = mi.MakeGenericMethod(fi.Type.GetGenericArguments()[0]); r[fi.Name] = mi.Invoke(r, new object[] { fi }); } catch { } //TODO: add logging. } } r.loading = false; return r; } public virtual void Delete() { if (deletedRecordListeners.ContainsKey(this.GetType())) deletedRecordListeners[this.GetType()](this); if (OnDelete != null) OnDelete(this); } //Properties public virtual DataProvider Provider { get{return null;} } public object ObjectId { get { return Id; } } public virtual string DefaultProperty { get { return "ObjectId"; } } public virtual object Value { get { return Id; } set { throw new System.NotSupportedException("SetValue must be overridden."); } } //Methods public virtual void Save(bool SaveChildren){} public virtual void Save(){} public override string ToString() { if (this[DefaultProperty] != null) return this[DefaultProperty].ToString(); else return base.ToString(); } public static object[] emptyObjectArray = new object[] { }; //Events public event RecordHandler OnChange; public event RecordHandler OnDelete; //Helpers protected static Dictionary<Type, RecordHandler> newRecordListeners = new Dictionary<Type, RecordHandler>(); public static void RegisterNewListener(Type type, RecordHandler handler) { newRecordListeners[type] = handler; } protected static Dictionary<Type, RecordHandler> changedRecordListeners = new Dictionary<Type, RecordHandler>(); public static void RegisterChangedListener(Type type, RecordHandler handler) { changedRecordListeners[type] = handler; } protected static Dictionary<Type, RecordHandler> deletedRecordListeners = new Dictionary<Type, RecordHandler>(); public static void RegisterDeletedListener(Type type, RecordHandler handler) { deletedRecordListeners[type] = handler; } public static void UnregisterDeletedListener(Type type, RecordHandler handler) { deletedRecordListeners[type] -= handler; } public static void UnregisterNewListener(Type type, RecordHandler handler) { newRecordListeners[type] -= handler; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -