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; } }