|
@@ -36,6 +36,9 @@ namespace InABox.Core
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ [field: NonSerialized]
|
|
|
+ public IList<Func<object, object?>?> Getters { get; } = new List<Func<object, object?>?>();
|
|
|
+
|
|
|
[field: NonSerialized]
|
|
|
public Dictionary<string, IList<Action<object, object>?>> Setters { get; } = new Dictionary<string, IList<Action<object, object>?>>();
|
|
|
|
|
@@ -99,9 +102,7 @@ namespace InABox.Core
|
|
|
{
|
|
|
foreach (var obj in objects)
|
|
|
{
|
|
|
- var row = NewRow();
|
|
|
- LoadRow(row, obj);
|
|
|
- Rows.Add(row);
|
|
|
+ LoadRow(obj);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -110,7 +111,7 @@ namespace InABox.Core
|
|
|
foreach (var row in rows)
|
|
|
{
|
|
|
var newrow = NewRow();
|
|
|
- LoadRow(newrow, row);
|
|
|
+ FillRow(newrow, row);
|
|
|
Rows.Add(newrow);
|
|
|
}
|
|
|
}
|
|
@@ -127,24 +128,34 @@ namespace InABox.Core
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void LoadRow(CoreRow row, object obj)
|
|
|
+ public void FillRow(CoreRow row, object obj)
|
|
|
{
|
|
|
- foreach (var col in Columns)
|
|
|
+ var bFirst = Getters.Count == 0;
|
|
|
+
|
|
|
+ for(var i = 0; i < Columns.Count; ++i)
|
|
|
+ {
|
|
|
try
|
|
|
{
|
|
|
- //var prop = DataModel.Property(obj.GetType(), col.ColumnName);
|
|
|
- //if (prop is CustomProperty)
|
|
|
- // prop is CustomProperty ? item.UserProperties[key] : CoreUtils.GetPropertyValue(item, key);
|
|
|
- var fieldvalue = CoreUtils.GetPropertyValue(obj, col.ColumnName);
|
|
|
- row[col.ColumnName] = fieldvalue;
|
|
|
+ if (bFirst)
|
|
|
+ {
|
|
|
+ var prop = DatabaseSchema.Property(obj.GetType(), Columns[i].ColumnName);
|
|
|
+ Getters.Add(prop?.Getter());
|
|
|
+ }
|
|
|
+
|
|
|
+ var getter = Getters[i];
|
|
|
+ if (getter != null)
|
|
|
+ row.Set(i, getter(obj));
|
|
|
+ else
|
|
|
+ row.Set(i, CoreUtils.GetPropertyValue(obj, Columns[i].ColumnName));
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace));
|
|
|
}
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- public void LoadRow(CoreRow row, CoreRow from)
|
|
|
+ public void FillRow(CoreRow row, CoreRow from)
|
|
|
{
|
|
|
foreach (var col in Columns)
|
|
|
try
|
|
@@ -414,10 +425,15 @@ namespace InABox.Core
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// Create a new row with data from <paramref name="obj"/>, and adds it to the table.
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="obj"></param>
|
|
|
+ /// <returns></returns>
|
|
|
public CoreTable LoadRow(object obj)
|
|
|
{
|
|
|
var row = NewRow();
|
|
|
- LoadRow(row, obj);
|
|
|
+ FillRow(row, obj);
|
|
|
Rows.Add(row);
|
|
|
return this;
|
|
|
}
|