namespace CloudGaming.Shared.Admin.Extensions;
public static class PagingViewExtensions
{
///
/// 创建数据源
///
///
///
///
///
public static PagingView BuilderDataSource(this PagingView pagingView, List data,
Type mainTableEntityType)
{
pagingView.SetMainTableEntityType(mainTableEntityType);
var propertyInfos = typeof(TEntity).GetProperties();
var fieldNames = propertyInfos.Select(item => item.Name).ToList();
var result = new List>();
foreach (var item in data)
{
var type = item!.GetType();
var dictionary = new Dictionary();
foreach (var fieldName in fieldNames)
{
dictionary[fieldName] = type?.GetProperty(fieldName)?.GetValue(item);
}
result.Add(dictionary);
}
pagingView.DataSource = result;
foreach (var item in fieldNames)
{
if (item.StartsWith("_")) continue;
pagingView.Columns.Add(new TableColumnView(item.ToFirstCharConvertLower(), item));
}
return pagingView;
}
///
/// 创建数据源 根据 datatable
///
///
///
///
public static PagingView BuilderDataSourceByDataTable(this PagingView pagingView, DataTable data,
Type mainTableEntityType)
{
pagingView.SetMainTableEntityType(mainTableEntityType);
var fieldNames = (from DataColumn dc in data.Columns select dc.ColumnName).ToList();
var result = new List>();
foreach (DataRow dr in data.Rows)
{
var dictionary = new Dictionary();
foreach (DataColumn dc in data.Columns)
{
dictionary.Add(dc.ColumnName, dr[dc.ColumnName]);
}
result.Add(dictionary);
}
pagingView.DataSource = result;
foreach (var item in fieldNames)
{
if (item.StartsWith("_")) continue;
pagingView.Columns.Add(new TableColumnView(item.ToFirstCharConvertLower(), item));
}
return pagingView;
}
///
/// 获取指定列
///
///
///
///
///
///
public static TableColumnView GetColumn(this PagingView pagingView, IQueryable query,
Expression> queryField)
{
var nameQuery = Tools.GetNameByExpression(queryField);
var tableColumnView = pagingView.Columns
.FirstOrDefault(w => w.FieldName.ToLower() == nameQuery.ToLower());
return tableColumnView!;
}
///
/// 格式化值
///
///
///
///
///
///
public static PagingView FormatValue(this PagingView pagingView, IQueryable query,
Expression> queryField,
Func funcValue)
{
var nameQuery = Tools.GetNameByExpression(queryField);
foreach (var item in pagingView.DataSource.Where(w => w.ContainsKey(nameQuery)))
{
var value = item[nameQuery];
item[nameQuery] = funcValue?.Invoke(value == null ? default : (TValue)value ?? default);
}
return pagingView;
}
///
/// 设置列显示名称
///
///
public static PagingView SetColumnDisplayName(this PagingView pagingView)
{
// 设置列显示名称
using var scope = App.CreateScope();
var databaseTableService = scope?.ServiceProvider.GetService();
if (databaseTableService == null)
{
return pagingView;
}
var genDbTableDtos = databaseTableService!.GetAllTablesByCache();
if (genDbTableDtos.Count == 0)
{
return pagingView;
}
var table = genDbTableDtos?
.Where(w => w.EntityName.ToLower() == pagingView.MainTableEntityType?.Name.ToLower())
.FirstOrDefault();
if (table == null)
{
return pagingView;
}
foreach (var column in pagingView.Columns)
{
var fieldName = column.FieldName.ToLower();
var tableInfo = table?.TableInfos?.FirstOrDefault(w => w.ColumnName.ToLower() == fieldName);
column.Title = string.IsNullOrWhiteSpace(tableInfo?.DisplayName) ? fieldName : tableInfo.DisplayName;
}
return pagingView;
}
///
/// 设置列信息 用于外键表列头得显示名称
///
///
///
///
///
///
///
///
public static TableColumnView SetColumn(this TableColumnView tableColumnView,
Expression> field, bool? show = null, string? width = null, bool sort = true)
{
// 设置列显示名称
using var scope = App.CreateScope();
var databaseTableService = scope?.ServiceProvider.GetService();
if (databaseTableService == null)
{
return tableColumnView;
}
var genDbTableDtoList = databaseTableService!.GetAllTablesByCache();
if (genDbTableDtoList.Count == 0)
{
return tableColumnView;
}
//自动获取名称对应的显示名称
var type = typeof(TEntity);
var name = Tools.GetNameByExpression(field);
var table = genDbTableDtoList.FirstOrDefault(w => w.EntityName?.ToLower() == type.Name.ToLower());
if (table == null)
{
return tableColumnView;
}
var tableInfo = table.TableInfos.FirstOrDefault(w => w.CsField?.ToLower() == name.ToLower());
if (tableInfo == null)
{
return tableColumnView;
}
tableColumnView.SetColumn(tableInfo.DisplayName, show, width, sort);
return tableColumnView;
}
}