/// <summary> /// Clear all items of the Collection /// </summary> public override void Clear() { if (RootNode == null) { throw new InvalidOperationException("Can't Clear items of a Close ObjectStore."); } RemoveDeletedDataBlocks(); if (HintSequentialRead) { HintSequentialRead = false; } if (Count > 0) { CurrentSequence = 0; RootNode.Clear(); SetCurrentItemAddress(-1, 0); if (DataSet != null) { DataSet.Clear(); } if (KeySet != null) { KeySet.Clear(); } base.Clear(); } PromoteLookup.Clear(); }
public void End() { anyDownedKeys.Clear(); anyDownedButtons.Clear(); previousDownedKeys.Clear(); previousDownedButtons.Clear(); for (int i = 0; i < downedKeys.Count; ++i) { previousDownedKeys.Add(downedKeys[i], pool); } for (int i = 0; i < downedButtons.Count; ++i) { previousDownedButtons.Add(downedButtons[i], pool); } ScrolledDown = 0; ScrolledUp = 0; TypedCharacters.Count = 0; }
public void End() { anyDownedKeys.Clear(); anyDownedButtons.Clear(); previousDownedKeys.Clear(); previousDownedButtons.Clear(); var keyPool = new PassthroughArrayPool <Key>(); var mouseButtonPool = new PassthroughArrayPool <MouseButton>(); var intPool = new PassthroughArrayPool <int>(); for (int i = 0; i < downedKeys.Count; ++i) { previousDownedKeys.Add(downedKeys[i], keyPool, intPool); } for (int i = 0; i < downedButtons.Count; ++i) { previousDownedButtons.Add(downedButtons[i], mouseButtonPool, intPool); } ScrolledDown = 0; ScrolledUp = 0; }
/// <summary> /// 调用 OnQuery 回调方法获得数据源 /// </summary> protected async Task QueryData() { // 目前设计使用 Items 参数后不回调 OnQueryAsync 方法 if (Items == null) { if (OnQueryAsync == null && DynamicContext != null && typeof(TItem).IsAssignableTo(typeof(IDynamicObject))) { // 动态数据 SelectedRows.Clear(); QueryItems = DynamicContext.GetItems().Cast <TItem>(); if (DynamicContext.OnGetSelectedRows != null) { SelectedRows.AddRange(DynamicContext.OnGetSelectedRows().Cast <TItem>()); } TotalCount = QueryItems.Count(); } else { // 数据集合 await OnQuery(); } } else { RowsCache = null; } async Task OnQuery() { QueryData <TItem>?queryData = null; var queryOption = new QueryPageOptions() { IsPage = IsPagination, PageIndex = PageIndex, PageItems = PageItems, SearchText = SearchText, SortOrder = SortOrder, SortName = SortName, SortList = string.IsNullOrEmpty(SortString) ? null : new List <string>(SortString.Split(",", StringSplitOptions.RemoveEmptyEntries)), Filters = Filters.Values, Searchs = GetSearchs(), AdvanceSearchs = GetAdvanceSearchs(), CustomerSearchs = GetCustomerSearchs(), SearchModel = SearchModel, StartIndex = StartIndex }; if (CustomerSearchModel != null) { queryOption.SearchModel = CustomerSearchModel; } queryData = await InternalOnQueryAsync(queryOption); RowsCache = null; Items = null; QueryItems = queryData.Items; TotalCount = queryData.TotalCount; IsAdvanceSearch = queryData.IsAdvanceSearch; // 处理选中行逻辑 ProcessSelectedRows(); // 分页情况下内部不做处理防止页码错乱 if (!queryOption.IsPage) { ProcessPageData(queryData, queryOption); } if (IsTree) { await ProcessTreeData(); } void ProcessSelectedRows() { // 判断模型是否有 [Key] Id 等可识别字段尝试重构 var rows = new List <TItem>(); if (HasKeyAttribute) { // 更新选中行逻辑 foreach (var item in SelectedRows) { var key = Utility.GetKeyValue <TItem, object>(item); if (key != null) { var row = QueryItems.FirstOrDefault(i => Utility.GetKeyValue <TItem, object>(i).ToString() == key.ToString()); if (row != null) { rows.Add(row); } } } } else { foreach (var row in SelectedRows) { if (QueryItems.Any(i => i == row)) { rows.Add(row); } } } SelectedRows = rows; } void ProcessPageData(QueryData <TItem> queryData, QueryPageOptions queryOption) { var filtered = queryData.IsFiltered; var sorted = queryData.IsSorted; var searched = queryData.IsSearch; // 外部未处理 SearchText 模糊查询 if (!searched && queryOption.Searchs.Any()) { QueryItems = QueryItems.Where(queryOption.Searchs.GetFilterFunc <TItem>(FilterLogic.Or)); TotalCount = QueryItems.Count(); } // 外部未处理自定义高级搜索 内部进行高级自定义搜索过滤 if (!IsAdvanceSearch && queryOption.CustomerSearchs.Any()) { QueryItems = QueryItems.Where(queryOption.CustomerSearchs.GetFilterFunc <TItem>()); TotalCount = QueryItems.Count(); IsAdvanceSearch = true; } // 外部未过滤,内部自行过滤 if (!filtered && queryOption.Filters.Any()) { QueryItems = QueryItems.Where(queryOption.Filters.GetFilterFunc <TItem>()); TotalCount = QueryItems.Count(); } // 外部未处理排序,内部自行排序 // 先处理列头排序 再处理默认多列排序 if (!sorted) { if (queryOption.SortOrder != SortOrder.Unset && !string.IsNullOrEmpty(queryOption.SortName)) { var invoker = Utility.GetSortFunc <TItem>(); QueryItems = invoker(QueryItems, queryOption.SortName, queryOption.SortOrder); } else if (queryOption.SortList != null && queryOption.SortList.Any()) { var invoker = Utility.GetSortListFunc <TItem>(); QueryItems = invoker(QueryItems, queryOption.SortList); } } } async Task ProcessTreeData() { KeySet.Clear(); if (HasKeyAttribute) { CheckExpandKeys(TreeRows); } if (KeySet.Count > 0) { TreeRows = new List <TableTreeNode <TItem> >(); foreach (var item in QueryItems) { var node = new TableTreeNode <TItem>(item) { HasChildren = CheckTreeChildren(item), }; node.IsExpand = IsExpandRow(node); if (node.IsExpand) { await RestoreIsExpand(node); } TreeRows.Add(node); } } else { TreeRows = QueryItems.Select(item => new TableTreeNode <TItem>(item) { HasChildren = CheckTreeChildren(item) }).ToList(); } } } }
/// <summary> /// 调用 OnQuery 回调方法获得数据源 /// </summary> protected async Task QueryData() { // https://gitee.com/LongbowEnterprise/BootstrapBlazor/issues/I29YK1 // 选中行目前不支持跨页 原因是选中行实例无法在翻页后保持 SelectedItems.Clear(); QueryData <TItem>?queryData = null; var queryOption = new QueryPageOptions() { IsPage = IsPagination, PageIndex = PageIndex, PageItems = PageItems, SearchText = SearchText, SortOrder = SortOrder, SortName = SortName, Filters = Filters.Values, Searchs = GetSearchs(), SearchModel = SearchModel }; if (OnQueryAsync != null) { queryData = await OnQueryAsync(queryOption); } else if (UseInjectDataService) { queryData = await GetDataService().QueryAsync(queryOption); } if (queryData != null) { Items = queryData.Items; if (IsTree) { KeySet.Clear(); if (TableTreeNode <TItem> .HasKey) { CheckExpandKeys(TreeRows); } if (KeySet.Count > 0) { TreeRows = new List <TableTreeNode <TItem> >(); foreach (var item in Items) { var node = new TableTreeNode <TItem>(item) { HasChildren = CheckTreeChildren(item), }; node.IsExpand = node.HasChildren && node.Key != null && KeySet.Contains(node.Key); if (node.IsExpand) { await RestoreIsExpand(node); } TreeRows.Add(node); } } else { TreeRows = Items.Select(item => new TableTreeNode <TItem>(item) { HasChildren = CheckTreeChildren(item) }).ToList(); } } TotalCount = queryData.TotalCount; IsFiltered = queryData.IsFiltered; IsSorted = queryData.IsSorted; IsSearch = queryData.IsSearch; // 外部未过滤,内部自行过滤 if (!IsFiltered && Filters.Any()) { Items = Items.Where(Filters.Values.GetFilterFunc <TItem>()); TotalCount = Items.Count(); } // 外部未处理排序,内部自行排序 if (!IsSorted && SortOrder != SortOrder.Unset && !string.IsNullOrEmpty(SortName)) { var invoker = SortLambdaCache.GetOrAdd(typeof(TItem), key => LambdaExtensions.GetSortLambda <TItem>().Compile()); Items = invoker(Items, SortName, SortOrder); } } if (SelectedRows != null) { SelectedItems.AddRange(Items.Where(i => SelectedRows.Contains(i))); } }