[ASP.NET][Telerik] Export and Import RadGrid Setting
我需要將 RadGrid 的狀態記下來,比如說,目前在第幾頁,過濾條件等等..
花了一點時間把所需要的資料倒出來,然後在 NeedDataSource 事件裡面調用 ExportGridSetting
{ var gridTableView = grid.MasterTableView; var setting = new GridSetting(); setting.Filter = gridTableView.FilterExpression; setting.OrderBy = gridTableView.SortExpressions.GetSortString(); setting.Skip = gridTableView.CurrentPageIndex * gridTableView.PageSize; setting.Take = gridTableView.PageSize; setting.PageIndex = gridTableView.CurrentPageIndex; var sortCommands = this.ExportSortCommands(grid); var filterCommands = ExportFilterCommands(grid); setting.SortCommands = sortCommands; setting.FilterCommands = filterCommands; return setting; }
匯出 FilterCommand
{ var filterCommands = new List<FilterCommand>(); foreach (GridColumn column in grid.MasterTableView.Columns) { if (column is GridBoundColumn == false) { continue; } filterCommands.Add(new FilterCommand() { PropertyName = column.UniqueName, FunctionName = column.CurrentFilterFunction.ToString(), FilterValue = column.CurrentFilterValue }); } return filterCommands; }
對照畫面取出所需的資料
匯出 SortCommand
{ var sortCommands = new List<SortCommand>(); foreach (var sort in grid.MasterTableView.SortExpressions.Cast<GridSortExpression>()) { EnumOrder order; if (!EnumOrder.TryParse(sort.SortOrder.ToString(), out order)) { continue; } sortCommands.Add(new SortCommand() { PropertyName = sort.FieldName, Order = order }); } return sortCommands; }
有匯出當然就會有匯入囉,可以在 Page_Load 事件裡調用 ImportGridSetting 方法
{ var gridTableView = radGrid.MasterTableView; gridTableView.FilterExpression = setting.Filter; gridTableView.PageSize = setting.Take; gridTableView.CurrentPageIndex = setting.PageIndex; this.ImportFilterCommands(radGrid, setting.FilterCommands); this.ImportSortCommands(radGrid, setting.SortCommands); }
{ var gridTableView = grid.MasterTableView; foreach (var command in filterCommands) { GridColumn column = gridTableView.GetColumnSafe(command.PropertyName); GridKnownFunction function; if (!GridKnownFunction.TryParse(command.FunctionName, out function)) { continue; } column.CurrentFilterFunction = function; column.CurrentFilterValue = command.FilterValue; } } public void ImportSortCommands(RadGrid grid, IEnumerable<SortCommand> sortCommands) { grid.MasterTableView.SortExpressions.Clear(); foreach (var element in sortCommands) { GridSortOrder order; if (!GridSortOrder.TryParse(element.Order.ToString(), out order)) { continue; } var expression = new GridSortExpression() { FieldName = element.PropertyName, SortOrder = order }; grid.MasterTableView.SortExpressions.Add(expression); } }
其餘的 DTO
{ public string PropertyName { get; set; } public string FunctionName { get; set; } public string FilterValue { get; set; } } public class SortCommand { public string PropertyName { get; set; } public EnumOrder Order { get; set; } } public enum EnumOrder { None, Ascending, Descending, } public class GridSetting { public GridSetting() { this.Take = 10; this.FilterCommands = new List<FilterCommand>(); this.SortCommands = new List<SortCommand>(); } public string Filter { get; set; } public string OrderBy { get; set; } public int Skip { get; set; }//CurrentPageIndex*PageSize public int Take { get; set; }//PageSize public int PageIndex { get; set; } public int RowIndex { get; set; } public IEnumerable<FilterCommand> FilterCommands { get; set; } public IEnumerable<SortCommand> SortCommands { get; set; } }
文章出自:http://www.dotblogs.com.tw/yc421206/archive/2015/08/31/153260.aspx
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET