/// <summary> /// 创建标准导出按钮 /// </summary> /// <typeparam name="T">继承自TopBasePoco的类</typeparam> /// <typeparam name="V">继承自ISearcher的类</typeparam> /// <param name="self">self</param> /// <param name="gridid">vmGuid</param> /// <param name="MustSelect"></param> /// <param name="exportType">导出类型 默认null,支持所有导出</param> /// <param name="param">参数</param> /// <returns></returns> public static GridAction MakeStandardExportAction <T, V>(this IBasePagedListVM <T, V> self , string gridid = null , bool MustSelect = false , ExportEnum?exportType = null , params KeyValuePair <string, string>[] param) where T : TopBasePoco where V : ISearcher { exportType = ExportEnum.Excel; var action = new GridAction { Name = "导出Excel", DialogTitle = "导出Excel", Area = string.Empty, ControllerName = "_Framework", ActionName = "GetExportExcel", ParameterType = GridActionParameterTypesEnum.MultiIdWithNull, IconCls = "layui-icon-download-circle", ShowInRow = false, ShowDialog = false, HideOnToolBar = false }; return(action); }
public static GridAction MakeActionsGroup <T, V>(this IBasePagedListVM <T, V> self , string name , List <GridAction> subActions , params Expression <Func <T, object> >[] whereStr) where T : TopBasePoco where V : ISearcher { var iconcls = string.Empty; var list = new List <string>(); foreach (var item in whereStr) { list.Add(PropertyHelper.GetPropertyName(item)); } return(new GridAction { ButtonId = Guid.NewGuid().ToString(), Name = name, DialogTitle = "", Area = "", ControllerName = "", ActionName = "ActionsGroup", ParameterType = GridActionParameterTypesEnum.NoId, IconCls = iconcls, DialogWidth = 0, DialogHeight = 0, ShowDialog = false, whereStr = list.ToArray(), SubActions = subActions }); }
/// <summary> /// 获取Jason格式的列表数据 /// </summary> /// <param name="self">是否需要对数据进行Json编码</param> /// <param name="returnColumnObject">不在后台进行ColumnFormatInfo的转化,而是直接输出ColumnFormatInfo的json结构到前端,由前端处理,默认False</param> /// <returns>Json格式的数据</returns> public static string GetDataJson <T>(this IBasePagedListVM <T, BaseSearcher> self, bool returnColumnObject = false) where T : TopBasePoco, new() { var sb = new StringBuilder(); self.GetHeaders(); if (self.IsSearched == false) { self.DoSearch(); } var el = self.GetEntityList().ToList(); //如果列表主键都为0,则生成自增主键,避免主键重复 if (el.All(x => x.ID == Guid.Empty)) { el.ForEach(x => x.ID = Guid.NewGuid()); } //循环生成列表数据 for (int x = 0; x < el.Count; x++) { var sou = el[x]; sb.Append(self.GetSingleDataJson(sou, returnColumnObject, x)); if (x < el.Count - 1) { sb.Append(","); } } return($"[{sb.ToString()}]"); }
/// <summary> /// 创建表头 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="V"></typeparam> /// <param name="self"></param> /// <param name="columnExp">绑定猎头表达式</param> /// <param name="width">宽度</param> /// <returns></returns> public static GridColumn <T> MakeGridHeader <T, V>(this IBasePagedListVM <T, V> self , Expression <Func <T, object> > columnExp ) where T : TopBasePoco where V : ISearcher { MemberExpression me = null; if (columnExp is MemberExpression) { me = columnExp as MemberExpression; } else if (columnExp is LambdaExpression) { var le = columnExp as LambdaExpression; if (le.Body is MemberExpression) { me = le.Body as MemberExpression; } } return(new GridColumn <T>(columnExp) { ColumnType = GridColumnTypeEnum.Normal }); }
/// <summary> /// 创建一个间隙列 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="V"></typeparam> /// <param name="self"></param> /// <returns></returns> public static GridColumn <T> MakeGridHeaderSpace <T, V>(this IBasePagedListVM <T, V> self) where T : TopBasePoco where V : ISearcher { return(new GridColumn <T>() { ColumnType = GridColumnTypeEnum.Space }); }
/// <summary> /// 创建一个父级表头 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="V"></typeparam> /// <param name="self"></param> /// <param name="title">标题</param> /// <returns></returns> public static GridColumn <T> MakeGridHeaderParent <T, V>(this IBasePagedListVM <T, V> self, string title ) where T : TopBasePoco where V : ISearcher { return(new GridColumn <T>() { Title = title }); }
/// <summary> /// 生成下载文件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="self"></param> /// <param name="ExportName"></param> /// <returns></returns> public static FileContentResult GetExportData <T> (this IBasePagedListVM <T, BaseSearcher> self, string ExportName = "") where T : TopBasePoco, new() { self.SearcherMode = self.Ids != null && self.Ids.Count > 0 ? ListVMSearchModeEnum.CheckExport : ListVMSearchModeEnum.Export; var data = self.GenerateExcel(); string ContentType = self.ExportExcelCount > 1 ? "application/x-zip-compresse" : "application/vnd.ms-excel"; ExportName = string.IsNullOrEmpty(ExportName) ? typeof(T).Name : ExportName; ExportName = self.ExportExcelCount > 1 ? $"Export_{ExportName}_{DateTime.Now.ToString("yyyyMMddHHmmssffff")}.zip" : $"Export_{ExportName}_{DateTime.Now.ToString("yyyyMMddHHmmssffff")}.xlsx"; FileContentResult Result = new FileContentResult(data, ContentType); Result.FileDownloadName = ExportName; return(Result); }
/// <summary> /// Get json format string of ListVM's search result /// </summary> /// <typeparam name="T">Model type</typeparam> /// <param name="self">a listvm</param> /// <param name="PlainText">true to return plain text, false to return formated html, such as checkbox,buttons ...</param> /// <returns>json string</returns> public static string GetJson <T>(this IBasePagedListVM <T, BaseSearcher> self, bool PlainText = true) where T : TopBasePoco, new() { Hashtable ht = new Hashtable { ["Data"] = self.GetDataJson(), ["Count"] = self.Searcher.Count, ["Page"] = self.Searcher.Page, ["PageCount"] = self.Searcher.PageCount, ["Msg"] = "success", ["Code"] = "200" }; return(JsonSerializer.Serialize(ht)); }
public static GridColumn <T> MakeGridHeaderAction <T, V>(this IBasePagedListVM <T, V> self , string title = null , int?width = 160 , int?rowspan = null ) where T : TopBasePoco where V : ISearcher { return(new GridColumn <T>() { ColumnType = GridColumnTypeEnum.Action, Width = width, Fixed = GridColumnFixedEnum.Right, Title = title ?? Program._localizer["Operation"] }); }
/// <summary> /// 生成GridColumn /// </summary> /// <typeparam name="T">继承自TopBasePoco的类</typeparam> /// <typeparam name="V">继承自ISearcher的类</typeparam> /// <param name="self">self</param> /// <param name="ColumnExp">指向T中字段的表达式</param> /// <param name="Format">格式化显示内容的委托函数,函数接受两个参数,第一个是整行数据,第二个是所选列的数据</param> /// <param name="Header">表头名称</param> /// <param name="Width">列宽</param> /// <param name="Flex">是否填充</param> /// <param name="AllowMultiLine">是否允许多行</param> /// <param name="NeedGroup">是否需要分组</param> /// <param name="ForeGroundFunc">设置前景色的委托函数</param> /// <param name="BackGroundFunc">设置背景色的委托函数</param> /// <returns>返回设置好的GridColumn类的实例</returns> public static GridColumn <T> MakeGridColumn <T, V>(this IBasePagedListVM <T, V> self , Expression <Func <T, object> > ColumnExp , ColumnFormatCallBack <T> Format = null , string Header = null , int?Width = null , int?Flex = null , bool AllowMultiLine = true , bool NeedGroup = false , Func <T, string> ForeGroundFunc = null , Func <T, string> BackGroundFunc = null) where T : TopBasePoco where V : ISearcher { GridColumn <T> rv = new GridColumn <T>(ColumnExp, Format, Header, Width, Flex, AllowMultiLine, NeedGroup, ForeGroundFunc, BackGroundFunc); return(rv); }
/// <summary> /// 获取Jason格式的列表数据 /// </summary> /// <param name="self">是否需要对数据进行Json编码</param> /// <returns>Json格式的数据</returns> public static List <T> GetDataJson <T>(this IBasePagedListVM <T, BaseSearcher> self) where T : TopBasePoco, new() { var sb = new StringBuilder(); self.GetHeaders(); if (self.IsSearched == false) { self.DoSearch(); } var el = self.GetEntityList().ToList(); //如果列表主键都为0,则生成自增主键,避免主键重复 if (el.All(x => x.ID == Guid.Empty)) { el.ForEach(x => x.ID = Guid.NewGuid()); } return(el); }
/// <summary> /// 创建标准动作 /// </summary> /// <typeparam name="T">继承自TopBasePoco的类</typeparam> /// <typeparam name="V">继承自ISearcher的类</typeparam> /// <param name="self">self</param> /// <param name="controllerName">动作的Controller</param> /// <param name="actionName">actionName</param> /// <param name="name">动作名,默认为‘新建’</param> /// <param name="dialogTitle">弹出窗口的标题</param> /// <param name="paraType">paraType</param> /// <param name="areaName">域名</param> /// <param name="dialogWidth">弹出窗口的宽度</param> /// <param name="dialogHeight">弹出窗口的高度</param> /// <param name="buttonId">Button的id 默认自动生成</param> /// <param name="whereStr">whereStr</param> /// <returns>列表动作</returns> /// <remarks> /// 根据标准动作类型,创建默认属性的标准动作 /// </remarks> public static GridAction MakeAction <T, V>(this IBasePagedListVM <T, V> self , string controllerName , string actionName , string name , string dialogTitle , GridActionParameterTypesEnum paraType , string areaName = null , int?dialogWidth = null , int?dialogHeight = null , string buttonId = null , params Expression <Func <T, object> >[] whereStr) where T : TopBasePoco where V : ISearcher { var iconcls = string.Empty; var list = new List <string>(); foreach (var item in whereStr) { list.Add(PropertyHelper.GetPropertyName(item)); } return(new GridAction { ButtonId = buttonId, Name = name, DialogTitle = dialogTitle, Area = areaName, ControllerName = controllerName, ActionName = actionName, ParameterType = paraType, IconCls = iconcls, DialogWidth = dialogWidth ?? 800, DialogHeight = dialogHeight, ShowDialog = true, whereStr = list.ToArray() }); }
/// <summary> /// 获取Jason格式的列表数据 /// </summary> /// <param name="self">是否需要对数据进行Json编码</param> /// <returns>Json格式的数据</returns> public static string GetDataJson <T>(this IBasePagedListVM <T, BaseSearcher> self) where T : TopBasePoco, new() { var sb = new StringBuilder(); self.GetHeaders(); self.DoSearch(); if (self.EntityDataTable != null) { for (int i = 0; i < self.EntityDataTable.Rows.Count; i++) { sb.Append(self.GetSingleRowJson(self.EntityDataTable.Rows[i], i)); if (i < self.EntityDataTable.Rows.Count - 1) { sb.Append(","); } } } else { var el = self.GetEntityList().ToList(); //如果列表主键都为0,则生成自增主键,避免主键重复 if (el.All(x => x.ID == Guid.Empty)) { el.ForEach(x => x.ID = Guid.NewGuid()); } //循环生成列表数据 for (int x = 0; x < el.Count; x++) { var sou = el[x]; sb.Append(self.GetSingleDataJson(sou, x)); if (x < el.Count - 1) { sb.Append(","); } } } return($"[{sb.ToString()}]"); }
/// <summary> /// 创建表头 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="V"></typeparam> /// <param name="self"></param> /// <param name="columnExp">绑定猎头表达式</param> /// <param name="width">宽度</param> /// <returns></returns> public static GridColumn <T> MakeGridHeader <T, V>(this IBasePagedListVM <T, V> self , Expression <Func <T, object> > columnExp , int?width = null ) where T : TopBasePoco where V : ISearcher { MemberExpression me = null; if (columnExp is MemberExpression) { me = columnExp as MemberExpression; } else if (columnExp is LambdaExpression) { var le = columnExp as LambdaExpression; if (le.Body is MemberExpression) { me = le.Body as MemberExpression; } } var alignType = GridColumnAlignEnum.Center; if (me != null) { var propType = me.Type; if (propType == typeof(string)) { alignType = GridColumnAlignEnum.Left; } } return(new GridColumn <T>(columnExp, width) { ColumnType = GridColumnTypeEnum.Normal, Align = alignType }); }
/// <summary> /// 生成单条数据的Json格式 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="self"></param> /// <param name="sou">数据</param> /// <returns>Json格式的数据</returns> public static string GetSingleDataJson <T>(this IBasePagedListVM <T, BaseSearcher> self, T sou) where T : TopBasePoco { var sb = new StringBuilder(); var RowBgColor = string.Empty; var RowColor = string.Empty; RowBgColor = self.SetFullRowBgColor(sou); RowColor = self.SetFullRowColor(sou); var isSelected = self.GetIsSelected(sou); //循环所有列 sb.Append("{"); var containsID = false; foreach (var baseCol in self.GetHeaders()) { foreach (var col in baseCol.BottomChildren) { if (col.ColumnType != GridColumnTypeEnum.Normal) { continue; } if (col.FieldName == "Id") { containsID = true; } var backColor = col.GetBackGroundColor(sou); //获取ListVM中设定的单元格前景色 var foreColor = col.GetForeGroundColor(sou); if (backColor == string.Empty) { backColor = RowBgColor; } if (foreColor == string.Empty) { foreColor = RowColor; } var style = string.Empty; if (backColor != string.Empty) { style += $"background-color:#{backColor};"; } if (foreColor != string.Empty) { style += $"color:#{foreColor};"; } //设定列名,如果是主键ID,则列名为id,如果不是主键列,则使用f0,f1,f2...这种方式命名,避免重复 sb.Append($"\"{col.Field}\":"); var html = string.Empty; var info = col.GetText(sou); if (info is ColumnFormatInfo) { html = GetFormatResult(self as BaseVM, info as ColumnFormatInfo); } else if (info is List <ColumnFormatInfo> ) { var temp = string.Empty; foreach (var item in info as List <ColumnFormatInfo> ) { temp += GetFormatResult(self as BaseVM, item); temp += " "; } html = temp; } else { html = info.ToString(); } var ptype = col.FieldType; //如果列是布尔值,直接返回true或false,让ExtJS生成CheckBox if (ptype == typeof(bool) || ptype == typeof(bool?)) { if (html.ToLower() == "true") { html = (self as BaseVM).UIService.MakeCheckBox(true, isReadOnly: true); } if (html.ToLower() == "false" || html == string.Empty) { html = (self as BaseVM).UIService.MakeCheckBox(false, isReadOnly: true); } } //如果列是枚举,直接使用枚举的文本作为多语言的Key查询多语言文字 else if (ptype.IsEnumOrNullableEnum()) { html = PropertyHelper.GetEnumDisplayName(ptype, html); } if (style != string.Empty) { html = $"<div style=\"{style}\">{html}</div>"; } html = "\"" + html.Replace(Environment.NewLine, "").Replace("\n", string.Empty).Replace("\r", string.Empty).Replace("\\", "\\\\").Replace("\"", "\\\"") + "\""; sb.Append(html); sb.Append(","); } } sb.Append($"\"TempIsSelected\":\"{ (isSelected == true ? "1" : "0") }\""); if (containsID == false) { sb.Append($",\"ID\":\"{sou.ID}\""); } // 标识当前行数据是否被选中 sb.Append($@",""LAY_CHECKED"":{sou.Checked.ToString().ToLower()}"); sb.Append(string.Empty); sb.Append("}"); return(sb.ToString()); }
/// <summary> /// Get json format string of ListVM's search result /// </summary> /// <typeparam name="T">Model type</typeparam> /// <param name="self">a listvm</param> /// <param name="PlainText">true to return plain text, false to return formated html, such as checkbox,buttons ...</param> /// <returns>json string</returns> public static string GetJson <T>(this IBasePagedListVM <T, BaseSearcher> self, bool PlainText = true) where T : TopBasePoco, new() { return($@"{{""Data"":{self.GetDataJson(PlainText)},""Count"":{self.Searcher.Count},""Page"":{self.Searcher.Page},""PageCount"":{self.Searcher.PageCount},""Msg"":""success"",""Code"":200}}"); }
public static string GetError <T>(this IBasePagedListVM <T, BaseSearcher> self) where T : TopBasePoco, new() { return($@"{{""Data"":{{}},""Count"":0,""Page"":0,""PageCount"":0,""Msg"":""{(self as BaseVM).MSD.GetFirstError()}"",""Code"":400}}"); }
/// <summary> /// 生成单条数据的Json格式 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="self"></param> /// <param name="obj">数据</param> /// <param name="returnColumnObject">不在后台进行ColumnFormatInfo的转化,而是直接输出ColumnFormatInfo的json结构到前端,由前端处理,默认False</param> /// <param name="index">index</param> /// <returns>Json格式的数据</returns> public static string GetSingleDataJson <T>(this IBasePagedListVM <T, BaseSearcher> self, object obj, bool returnColumnObject, int index = 0) where T : TopBasePoco { bool inner = false; var sb = new StringBuilder(); var RowBgColor = string.Empty; var RowColor = string.Empty; if (!(obj is T sou)) { sou = self.CreateEmptyEntity(); } RowBgColor = self.SetFullRowBgColor(sou); RowColor = self.SetFullRowColor(sou); var isSelected = self.GetIsSelected(sou); //循环所有列 sb.Append("{"); bool containsID = false; bool addHiddenID = false; Dictionary <string, (string, string)> colorcolumns = new Dictionary <string, (string, string)>(); foreach (var baseCol in self.GetHeaders()) { foreach (var col in baseCol.BottomChildren) { if (col.ColumnType != GridColumnTypeEnum.Normal) { continue; } if (col.FieldName?.ToLower() == "id") { containsID = true; } var backColor = col.GetBackGroundColor(sou); //获取ListVM中设定的单元格前景色 var foreColor = col.GetForeGroundColor(sou); if (backColor == string.Empty) { backColor = RowBgColor; } if (foreColor == string.Empty) { foreColor = RowColor; } (string bgcolor, string forecolor)colors = (null, null); if (backColor != string.Empty) { colors.bgcolor = backColor; } if (foreColor != string.Empty) { colors.forecolor = foreColor; } if (string.IsNullOrEmpty(colors.bgcolor) == false || string.IsNullOrEmpty(colors.forecolor) == false) { colorcolumns.Add(col.Field, colors); } //设定列名,如果是主键ID,则列名为id,如果不是主键列,则使用f0,f1,f2...这种方式命名,避免重复 var ptype = col.FieldType; if (col.Field?.ToLower() == "children" && typeof(IEnumerable <T>).IsAssignableFrom(ptype)) { var children = ((IEnumerable <T>)col.GetObject(obj))?.ToList(); if (children == null || children.Count() == 0) { continue; } } sb.Append($"\"{col.Field}\":"); var html = string.Empty; if (col.EditType == EditTypeEnum.Text || col.EditType == null) { if (typeof(IEnumerable <T>).IsAssignableFrom(ptype)) { var children = ((IEnumerable <T>)col.GetObject(obj))?.ToList(); if (children != null) { html = "["; for (int i = 0; i < children.Count; i++) { var item = children[i]; html += self.GetSingleDataJson(item, returnColumnObject); if (i < children.Count - 1) { html += ","; } } html += "]"; } else { //html = "[]"; } inner = true; } else { if (returnColumnObject == true) { html = col.GetText(sou, false).ToString(); } else { var info = col.GetText(sou); if (info is ColumnFormatInfo) { html = GetFormatResult(self as BaseVM, info as ColumnFormatInfo); } else if (info is List <ColumnFormatInfo> ) { var temp = string.Empty; foreach (var item in info as List <ColumnFormatInfo> ) { temp += GetFormatResult(self as BaseVM, item); temp += " "; } html = temp; } else { html = info.ToString(); } } //如果列是布尔值,直接返回true或false,让前台生成CheckBox if (ptype == typeof(bool) || ptype == typeof(bool?)) { if (returnColumnObject == false) { if (html.ToLower() == "true") { html = (self as BaseVM).UIService.MakeCheckBox(true, isReadOnly: true); } if (html.ToLower() == "false" || html == string.Empty) { html = (self as BaseVM).UIService.MakeCheckBox(false, isReadOnly: true); } } else { if (html != null && html != string.Empty) { html = html.ToLower(); } } } //如果列是枚举,直接使用枚举的文本作为多语言的Key查询多语言文字 else if (ptype.IsEnumOrNullableEnum()) { if (int.TryParse(html, out int enumvalue)) { html = PropertyHelper.GetEnumDisplayName(ptype, enumvalue); } } } } else { string val = col.GetText(sou).ToString(); string name = $"{self.DetailGridPrix}[{index}].{col.Field}"; switch (col.EditType) { case EditTypeEnum.TextBox: html = (self as BaseVM).UIService.MakeTextBox(name, val); break; case EditTypeEnum.CheckBox: bool.TryParse(val, out bool nb); html = (self as BaseVM).UIService.MakeCheckBox(nb, null, name, "true"); break; case EditTypeEnum.ComboBox: html = (self as BaseVM).UIService.MakeCombo(name, col.ListItems, val); break; default: break; } } if (string.IsNullOrEmpty(self.DetailGridPrix) == false && addHiddenID == false) { html += $@"<input hidden name='{self.DetailGridPrix}[{index}].ID' value='{sou.GetID()}'/>"; addHiddenID = true; } if (inner == false) { html = "\"" + html.Replace(Environment.NewLine, "").Replace("\t", string.Empty).Replace("\n", string.Empty).Replace("\r", string.Empty).Replace("\\", "\\\\").Replace("\"", "\\\"") + "\""; } sb.Append(html); sb.Append(","); } } sb.Append($"\"TempIsSelected\":\"{ (isSelected == true ? "1" : "0") }\""); foreach (var cc in colorcolumns) { if (string.IsNullOrEmpty(cc.Value.Item1) == false) { string bg = cc.Value.Item1; if (bg.StartsWith("#") == false) { bg = "#" + bg; } sb.Append($",\"{cc.Key}__bgcolor\":\"{bg}\""); } if (string.IsNullOrEmpty(cc.Value.Item2) == false) { string fore = cc.Value.Item2; if (fore.StartsWith("#") == false) { fore = "#" + fore; } sb.Append($",\"{cc.Key}__forecolor\":\"{fore}\""); } } if (containsID == false) { sb.Append($",\"ID\":\"{(sou as dynamic).ID}\""); } // 标识当前行数据是否被选中 sb.Append($@",""LAY_CHECKED"":{sou.Checked.ToString().ToLower()}"); sb.Append(string.Empty); sb.Append("}"); return(sb.ToString()); }
public static string GetJson <T>(this IBasePagedListVM <T, BaseSearcher> self) where T : TopBasePoco, new() { return($@"{{""Data"":{self.GetDataJson(true)},""Count"":{self.Searcher.Count},""Page"":{self.Searcher.Page},""PageCount"":{self.Searcher.PageCount}}}"); }
/// <summary> /// 创建标准动作 /// </summary> /// <typeparam name="T">继承自TopBasePoco的类</typeparam> /// <typeparam name="V">继承自ISearcher的类</typeparam> /// <param name="self">self</param> /// <param name="controllerName">动作的Controller</param> /// <param name="standardType">标准动作类型</param> /// <param name="dialogTitle">弹出窗口的标题</param> /// <param name="areaName">域名</param> /// <param name="dialogWidth">弹出窗口的宽度</param> /// <param name="dialogHeight">弹出窗口的高度</param> /// <param name="name">动作名,默认为‘新建’</param> /// <param name="buttonId">Button的id 默认自动生成</param> /// <param name="whereStr">whereStr</param> /// <returns>列表动作</returns> /// <remarks> /// 根据标准动作类型,创建默认属性的标准动作 /// </remarks> public static GridAction MakeStandardAction <T, V>(this IBasePagedListVM <T, V> self , string controllerName , GridActionStandardTypesEnum standardType , string dialogTitle , string areaName = null , int?dialogWidth = null , int?dialogHeight = null , string name = null , string buttonId = null , string queryString = null , string urlParampter = null , params Expression <Func <T, object> >[] whereStr) where T : TopBasePoco where V : ISearcher { var iconcls = string.Empty; var actionName = standardType.ToString(); var gridname = string.Empty; var paraType = GridActionParameterTypesEnum.NoId; var showInRow = false; var hideOnToolBar = false; switch (standardType) { case GridActionStandardTypesEnum.Create: iconcls = "layui-icon-add-1"; gridname = "新建"; paraType = GridActionParameterTypesEnum.NoId; break; case GridActionStandardTypesEnum.AddRow: iconcls = "layui-icon-add-1"; gridname = "新建"; paraType = GridActionParameterTypesEnum.AddRow; break; case GridActionStandardTypesEnum.Edit: iconcls = "layui-icon-edit"; gridname = "修改"; paraType = GridActionParameterTypesEnum.SingleId; showInRow = true; hideOnToolBar = true; break; case GridActionStandardTypesEnum.Delete: iconcls = "layui-icon-delete"; gridname = "删除"; paraType = GridActionParameterTypesEnum.SingleId; showInRow = true; hideOnToolBar = true; break; case GridActionStandardTypesEnum.RemoveRow: iconcls = "layui-icon-delete"; gridname = "删除"; paraType = GridActionParameterTypesEnum.RemoveRow; showInRow = true; hideOnToolBar = true; break; case GridActionStandardTypesEnum.Details: iconcls = "layui-icon-form"; gridname = string.IsNullOrEmpty(name) ? "详细" : name; paraType = GridActionParameterTypesEnum.SingleId; showInRow = true; hideOnToolBar = true; break; case GridActionStandardTypesEnum.CustomAction: iconcls = "layui-icon-form"; gridname = string.IsNullOrEmpty(name) ? "自定义" : name; paraType = GridActionParameterTypesEnum.SingleId; showInRow = true; hideOnToolBar = true; break; case GridActionStandardTypesEnum.BatchEdit: iconcls = "layui-icon-edit"; gridname = "批量修改"; paraType = GridActionParameterTypesEnum.MultiIds; break; case GridActionStandardTypesEnum.BatchDelete: iconcls = "layui-icon-delete"; gridname = "批量删除"; paraType = GridActionParameterTypesEnum.MultiIds; break; case GridActionStandardTypesEnum.Import: iconcls = "layui-icon-templeate-1"; gridname = "导入"; paraType = GridActionParameterTypesEnum.NoId; break; case GridActionStandardTypesEnum.Index: iconcls = "layui-icon-templeate-1"; gridname = name == string.Empty?"跳转":name; paraType = GridActionParameterTypesEnum.IndexUrl; showInRow = true; hideOnToolBar = true; break; default: break; } var list = new List <string>(); foreach (var item in whereStr) { list.Add(PropertyHelper.GetPropertyName(item)); } return(new GridAction { ButtonId = buttonId, Name = (name ?? gridname), DialogTitle = dialogTitle, Area = areaName, ControllerName = controllerName, ActionName = actionName, ParameterType = paraType, QueryString = queryString, UrlParam = urlParampter, IconCls = iconcls, DialogWidth = dialogWidth ?? 800, DialogHeight = dialogHeight, ShowInRow = showInRow, ShowDialog = true, HideOnToolBar = hideOnToolBar, whereStr = list.ToArray() }); }
public static string GetSingleRowJson <T>(this IBasePagedListVM <T, BaseSearcher> self, DataRow obj, int index = 0) where T : TopBasePoco { var sb = new StringBuilder(); //循环所有列 sb.Append("{"); bool containsID = false; foreach (var baseCol in self.GetHeaders()) { foreach (var col in baseCol.BottomChildren) { if (col.ColumnType != GridColumnTypeEnum.Normal) { continue; } if (col.Title.ToLower() == "Id") { containsID = true; } sb.Append($"\"{col.Title}\":"); var html = string.Empty; if (col.EditType == EditTypeEnum.Text || col.EditType == null) { var info = obj[col.Title]; html = info.ToString(); var ptype = col.FieldType; //如果列是布尔值,直接返回true或false,让ExtJS生成CheckBox if (ptype == typeof(bool) || ptype == typeof(bool?)) { if (html.ToLower() == "true") { html = (self as BaseVM).UIService.MakeCheckBox(true, isReadOnly: true); } if (html.ToLower() == "false" || html == string.Empty) { html = (self as BaseVM).UIService.MakeCheckBox(false, isReadOnly: true); } } //如果列是枚举,直接使用枚举的文本作为多语言的Key查询多语言文字 else if (ptype.IsEnumOrNullableEnum()) { html = PropertyHelper.GetEnumDisplayName(ptype, html); } } html = "\"" + html.Replace(Environment.NewLine, "").Replace("\n", string.Empty).Replace("\r", string.Empty).Replace("\\", "\\\\").Replace("\"", "\\\"") + "\""; sb.Append(html); sb.Append(","); } } sb.Append($"\"TempIsSelected\":\"{"0" }\""); if (containsID == false) { sb.Append($",\"ID\":\"{Guid.NewGuid().ToString()}\""); } // 标识当前行数据是否被选中 sb.Append($@",""LAY_CHECKED"":false"); sb.Append(string.Empty); sb.Append("}"); return(sb.ToString()); }
/// <summary> /// 生成单条数据的Json格式 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="self"></param> /// <param name="obj">数据</param> /// <param name="returnColumnObject">不在后台进行ColumnFormatInfo的转化,而是直接输出ColumnFormatInfo的json结构到前端,由前端处理,默认False</param> /// <param name="index">index</param> /// <returns>Json格式的数据</returns> public static string GetSingleDataJson <T>(this IBasePagedListVM <T, BaseSearcher> self, object obj, bool returnColumnObject, int index = 0) where T : TopBasePoco { var sb = new StringBuilder(); var RowBgColor = string.Empty; var RowColor = string.Empty; if (!(obj is T sou)) { sou = self.CreateEmptyEntity(); } RowBgColor = self.SetFullRowBgColor(sou); RowColor = self.SetFullRowColor(sou); var isSelected = self.GetIsSelected(sou); //循环所有列 sb.Append("{"); bool containsID = false; bool addHiddenID = false; foreach (var baseCol in self.GetHeaders()) { foreach (var col in baseCol.BottomChildren) { if (col.ColumnType != GridColumnTypeEnum.Normal) { continue; } if (col.FieldName == "Id") { containsID = true; } var backColor = col.GetBackGroundColor(sou); //获取ListVM中设定的单元格前景色 var foreColor = col.GetForeGroundColor(sou); if (backColor == string.Empty) { backColor = RowBgColor; } if (foreColor == string.Empty) { foreColor = RowColor; } var style = string.Empty; if (backColor != string.Empty) { style += $"background-color:#{backColor};"; } if (foreColor != string.Empty) { style += $"color:#{foreColor};"; } //设定列名,如果是主键ID,则列名为id,如果不是主键列,则使用f0,f1,f2...这种方式命名,避免重复 sb.Append($"\"{col.Field}\":"); var html = string.Empty; if (col.EditType == EditTypeEnum.Text || col.EditType == null) { if (returnColumnObject == true) { html = col.GetText(sou, false).ToString(); } else { var info = col.GetText(sou); if (info is ColumnFormatInfo) { html = GetFormatResult(self as BaseVM, info as ColumnFormatInfo); } else if (info is List <ColumnFormatInfo> ) { var temp = string.Empty; foreach (var item in info as List <ColumnFormatInfo> ) { temp += GetFormatResult(self as BaseVM, item); temp += " "; } html = temp; } else { html = info.ToString(); } } var ptype = col.FieldType; //如果列是布尔值,直接返回true或false,让ExtJS生成CheckBox if (ptype == typeof(bool) || ptype == typeof(bool?)) { if (returnColumnObject == false) { if (html.ToLower() == "true") { html = (self as BaseVM).UIService.MakeCheckBox(true, isReadOnly: true); } if (html.ToLower() == "false" || html == string.Empty) { html = (self as BaseVM).UIService.MakeCheckBox(false, isReadOnly: true); } } else { if (html != null && html != string.Empty) { html = html.ToLower(); } } } //如果列是枚举,直接使用枚举的文本作为多语言的Key查询多语言文字 else if (ptype.IsEnumOrNullableEnum()) { if (int.TryParse(html, out int enumvalue)) { html = PropertyHelper.GetEnumDisplayName(ptype, enumvalue); } } if (style != string.Empty) { html = $"<div style=\"{style}\">{html}</div>"; } } else { string val = col.GetText(sou).ToString(); string name = $"{self.DetailGridPrix}[{index}].{col.Field}"; switch (col.EditType) { case EditTypeEnum.TextBox: html = (self as BaseVM).UIService.MakeTextBox(name, val); break; case EditTypeEnum.CheckBox: bool.TryParse(val, out bool nb); html = (self as BaseVM).UIService.MakeCheckBox(nb, null, name, "true"); break; case EditTypeEnum.ComboBox: html = (self as BaseVM).UIService.MakeCombo(name, col.ListItems, val); break; default: break; } } if (string.IsNullOrEmpty(self.DetailGridPrix) == false && addHiddenID == false) { html += $@"<input hidden name=""{self.DetailGridPrix}[{index}].ID"" value=""{sou.ID}""/>"; addHiddenID = true; } html = "\"" + html.Replace(Environment.NewLine, "").Replace("\n", string.Empty).Replace("\r", string.Empty).Replace("\\", "\\\\").Replace("\"", "\\\"") + "\""; sb.Append(html); sb.Append(","); } } sb.Append($"\"TempIsSelected\":\"{ (isSelected == true ? "1" : "0") }\""); if (containsID == false) { sb.Append($",\"ID\":\"{sou.ID}\""); } // 标识当前行数据是否被选中 sb.Append($@",""LAY_CHECKED"":{sou.Checked.ToString().ToLower()}"); sb.Append(string.Empty); sb.Append("}"); return(sb.ToString()); }
/// <summary> /// 创建标准动作 /// </summary> /// <typeparam name="T">继承自TopBasePoco的类</typeparam> /// <typeparam name="V">继承自ISearcher的类</typeparam> /// <param name="self">self</param> /// <param name="controllerName">动作的Controller</param> /// <param name="standardType">标准动作类型</param> /// <param name="dialogTitle">弹出窗口的标题,可为空,代表使用默认文字</param> /// <param name="areaName">域名</param> /// <param name="dialogWidth">弹出窗口的宽度</param> /// <param name="dialogHeight">弹出窗口的高度</param> /// <param name="name">按钮显示的文字</param> /// <param name="buttonId">Button的id 默认自动生成</param> /// <param name="whereStr">whereStr</param> /// <returns>列表动作</returns> /// <remarks> /// 根据标准动作类型,创建默认属性的标准动作 /// </remarks> public static GridAction MakeStandardAction <T, V>(this IBasePagedListVM <T, V> self , string controllerName , GridActionStandardTypesEnum standardType , string dialogTitle , string areaName = null , int?dialogWidth = null , int?dialogHeight = null , string name = null , string buttonId = null , params Expression <Func <T, object> >[] whereStr) where T : TopBasePoco where V : ISearcher { var iconcls = string.Empty; var actionName = standardType.ToString(); var gridname = string.Empty; var paraType = GridActionParameterTypesEnum.NoId; var showInRow = false; var hideOnToolBar = false; var showDialog = true; switch (standardType) { case GridActionStandardTypesEnum.Create: iconcls = "layui-icon layui-icon-add-1"; gridname = Program._localizer["Create"]; paraType = GridActionParameterTypesEnum.NoId; break; case GridActionStandardTypesEnum.AddRow: iconcls = "layui-icon layui-icon-add-1"; gridname = Program._localizer["Create"]; paraType = GridActionParameterTypesEnum.AddRow; break; case GridActionStandardTypesEnum.Edit: iconcls = "layui-icon layui-icon-edit"; gridname = Program._localizer["Edit"]; paraType = GridActionParameterTypesEnum.SingleId; showInRow = true; hideOnToolBar = true; break; case GridActionStandardTypesEnum.Delete: iconcls = "layui-icon layui-icon-delete"; gridname = Program._localizer["Delete"]; paraType = GridActionParameterTypesEnum.SingleId; showInRow = true; hideOnToolBar = true; break; case GridActionStandardTypesEnum.RemoveRow: iconcls = "layui-icon layui-icon-delete"; gridname = Program._localizer["Delete"]; paraType = GridActionParameterTypesEnum.RemoveRow; showInRow = true; hideOnToolBar = true; break; case GridActionStandardTypesEnum.Details: iconcls = "layui-icon layui-icon-form"; gridname = Program._localizer["Details"]; paraType = GridActionParameterTypesEnum.SingleId; showInRow = true; hideOnToolBar = true; break; case GridActionStandardTypesEnum.BatchEdit: iconcls = "layui-icon layui-icon-edit"; gridname = Program._localizer["BatchEdit"]; paraType = GridActionParameterTypesEnum.MultiIds; break; case GridActionStandardTypesEnum.BatchDelete: iconcls = "layui-icon layui-icon-delete"; gridname = Program._localizer["BatchDelete"]; paraType = GridActionParameterTypesEnum.MultiIds; break; case GridActionStandardTypesEnum.Import: iconcls = "layui-icon layui-icon-templeate-1"; gridname = Program._localizer["Import"]; paraType = GridActionParameterTypesEnum.NoId; break; case GridActionStandardTypesEnum.ExportExcel: iconcls = "layui-icon layui-icon-download-circle"; gridname = Program._localizer["Export"]; paraType = GridActionParameterTypesEnum.MultiIdWithNull; name = Program._localizer["ExportExcel"]; showInRow = false; showDialog = false; hideOnToolBar = false; break; default: break; } if (string.IsNullOrEmpty(dialogTitle)) { dialogTitle = gridname; } var list = new List <string>(); foreach (var item in whereStr) { list.Add(PropertyHelper.GetPropertyName(item)); } return(new GridAction { ButtonId = buttonId, Name = (name ?? gridname), DialogTitle = dialogTitle, Area = areaName, ControllerName = controllerName, ActionName = actionName, ParameterType = paraType, IconCls = iconcls, DialogWidth = dialogWidth ?? 800, DialogHeight = dialogHeight, ShowInRow = showInRow, ShowDialog = showDialog, HideOnToolBar = hideOnToolBar, whereStr = list.ToArray() }); }