вывод данных во view-модель с использованием методов

This commit is contained in:
kotcheshir73 2022-03-18 11:16:29 +04:00
parent 48ad010501
commit c4402d976d
4 changed files with 52 additions and 2 deletions

View File

@ -4,6 +4,7 @@ using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
@ -59,5 +60,12 @@ namespace DatabaseCore.Models.Department
public StudentGroup SecurityCheck(StudentGroup entity, bool allowFullData) => entity;
public override string ToString() => $"{EducationDirection?.ShortName}-{AcademicCourse}{GroupNumber}";
//-------------------------------------------------------------------------
public int GetStudnetsByState(int state)
{
return Students?.Where(x => x.StudentState == state)?.Count() ?? 0;
}
}
}

View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
namespace ModuleTools.Attributes
{
@ -26,6 +27,8 @@ namespace ModuleTools.Attributes
/// </summary>
public bool AllowCopyWithoutRigth { get; set; } = true;
public Type[] MethodParams { get; set; } = null;
/// <summary>
/// Настройка для полей сущности правил маппинга
/// </summary>

View File

@ -75,6 +75,39 @@ namespace ModuleTools.BusinessLogics
value = (value as ICollection)?.Count;
break;
}
else if (prop == "Method")
{
int index = 0;
while (true)
{
if (props[index++] == "Method")
break;
if (index == props.Length)
{
break;
}
}
var methodName = props[index].Split('[')?[0];
if (string.IsNullOrEmpty(methodName))
{
break;
}
var parameters = props[index].Split(new char[] { '[' , ']'}, StringSplitOptions.RemoveEmptyEntries)?[1].Split(',');
var objs = new object[parameters.Length];
for(int i = 0; i < parameters.Length; ++i)
{
var type = parameters[i].Split(':')[0];
switch(type)
{
case "Enum":
objs[i] = (int)Enum.Parse(customAttribute.MethodParams[i], parameters[i].Split(':')[1]);
break;
}
}
value = typeFrom.InvokeMember(methodName, BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, value, objs);
break;
}
var bindingProperty = value.GetType().GetProperty(prop);
if (bindingProperty != null)
{

View File

@ -3,6 +3,7 @@ using ModuleTools.Attributes;
using ModuleTools.Enums;
using ModuleTools.ViewModels;
using System;
using System.Collections.Generic;
namespace DepartmentBusinessLogic.ViewModels
{
@ -49,9 +50,14 @@ namespace DepartmentBusinessLogic.ViewModels
[MapConfiguration("GroupNumber")]
public int GroupNumber { get; set; }
[MapConfiguration("Method.GetStudnetsByState[Enum:Учится]", IsDifficle = true, MethodParams = new Type[] { typeof(StudentState) })]
public int StudentActualCount { get; set; }
[MapConfiguration("Method.GetStudnetsByState[Enum:Академ]", IsDifficle = true, MethodParams = new Type[] { typeof(StudentState) })]
public int StudentAcademCount { get; set; }
[ViewModelControlListProperty("Количество студентов")]
[MapConfiguration("Students.Count", IsDifficle = true)]
public int StudentCount { get; set; }
public string StudentCount => $"{StudentActualCount + StudentAcademCount} ({StudentActualCount}, {StudentAcademCount})";
[ViewModelControlElementProperty("Куратор", ControlType.ControlGuid, MustHaveValue = false, ReadOnly = false, ControlTypeObject = "DepartmentWindowsDesktop.EntityControls.ControlLecturerList, DepartmentWindowsDesktop")]
[MapConfiguration("LecturerId")]