@@ -184,19 +184,25 @@ public partial class EditorForm<TModel> : IShowLabel
184184 /// </summary>
185185 private readonly List < IEditorItem > _editorItems = [ ] ;
186186
187- /// <summary>
188- /// 获得/设置 渲染的编辑项集合
189- /// </summary>
190- [ NotNull ]
191- private List < IEditorItem > ? _formItems = null ;
187+ private IEnumerable < IEditorItem > UnsetGroupItems => RenderItems . Where ( i => string . IsNullOrEmpty ( i . GroupName ) && i . IsVisible ( ItemChangedType , IsSearch . Value ) ) ;
192188
193- private IEnumerable < IEditorItem > UnsetGroupItems => _formItems . Where ( i => string . IsNullOrEmpty ( i . GroupName ) && i . IsVisible ( ItemChangedType , IsSearch . Value ) ) ;
194-
195- private IEnumerable < KeyValuePair < string , IOrderedEnumerable < IEditorItem > > > GroupItems => _formItems
189+ private IEnumerable < KeyValuePair < string , IOrderedEnumerable < IEditorItem > > > GroupItems => RenderItems
196190 . Where ( i => ! string . IsNullOrEmpty ( i . GroupName ) && i . IsVisible ( ItemChangedType , IsSearch . Value ) )
197191 . GroupBy ( i => i . GroupOrder ) . OrderBy ( i => i . Key )
198192 . Select ( i => new KeyValuePair < string , IOrderedEnumerable < IEditorItem > > ( i . First ( ) . GroupName ! , i . OrderBy ( x => x . Order ) ) ) ;
199193
194+ private bool _inited ;
195+ private List < IEditorItem > ? _itemsCache ;
196+
197+ private List < IEditorItem > RenderItems
198+ {
199+ get
200+ {
201+ _itemsCache ??= GetRenderItems ( ) ;
202+ return _itemsCache ;
203+ }
204+ }
205+
200206 /// <summary>
201207 /// OnInitialized 方法
202208 /// </summary>
@@ -217,7 +223,6 @@ protected override void OnInitialized()
217223
218224 // 统一设置所有 IEditorItem 的 PlaceHolder
219225 PlaceHolderText ??= Localizer [ nameof ( PlaceHolderText ) ] ;
220-
221226 IsSearch ??= false ;
222227 }
223228
@@ -230,66 +235,75 @@ protected override void OnParametersSet()
230235
231236 // 为空时使用级联参数 ValidateForm 的 ShowLabel
232237 ShowLabel ??= ValidateForm ? . ShowLabel ;
233- _formItems = null ;
238+ _itemsCache = null ;
234239 }
235240
236- private bool _inited ;
237-
238- private Task OnRenderAsync ( bool firstRender )
241+ /// <summary>
242+ /// <inheritdoc/>
243+ /// </summary>
244+ /// <param name="firstRender"></param>
245+ protected override async Task OnAfterRenderAsync ( bool firstRender )
239246 {
247+ await base . OnAfterRenderAsync ( firstRender ) ;
248+
240249 if ( firstRender )
241250 {
251+ foreach ( var item in RenderItems )
252+ {
253+ if ( item . Lookup == null && ! string . IsNullOrEmpty ( item . LookupServiceKey ) )
254+ {
255+ var lookupServcie = item . LookupService ?? LookupService ;
256+ item . Lookup = await lookupServcie . GetItemsAsync ( item . LookupServiceKey , item . LookupServiceData ) ;
257+ }
258+ }
242259 _inited = true ;
243260 StateHasChanged ( ) ;
244261 }
245- return Task . CompletedTask ;
246262 }
247263
248- private void ResetItems ( )
264+ private List < IEditorItem > GetRenderItems ( )
249265 {
250- if ( _formItems == null )
266+ var items = new List < IEditorItem > ( ) ;
267+ if ( Items != null )
251268 {
252- _formItems = [ ] ;
253- if ( Items != null )
254- {
255- _formItems . AddRange ( Items . Where ( i => ! i . GetIgnore ( ) && ! string . IsNullOrEmpty ( i . GetFieldName ( ) ) ) ) ;
256- }
257- else
269+ items . AddRange ( Items . Where ( i => ! i . GetIgnore ( ) && ! string . IsNullOrEmpty ( i . GetFieldName ( ) ) ) ) ;
270+ }
271+ else
272+ {
273+ // 如果 EditorItems 有值表示 用户自定义列
274+ if ( AutoGenerateAllItem )
258275 {
259- // 如果 EditorItems 有值表示 用户自定义列
260- if ( AutoGenerateAllItem )
261- {
262- // 获取绑定模型所有属性
263- var items = Utility . GetTableColumns < TModel > ( defaultOrderCallback : ColumnOrderCallback ) . ToList ( ) ;
276+ // 获取绑定模型所有属性
277+ var columns = Utility . GetTableColumns < TModel > ( defaultOrderCallback : ColumnOrderCallback ) . ToList ( ) ;
264278
265- // 通过设定的 FieldItems 模板获取项进行渲染
266- foreach ( var el in _editorItems )
279+ // 通过设定的 FieldItems 模板获取项进行渲染
280+ foreach ( var el in _editorItems )
281+ {
282+ var item = columns . FirstOrDefault ( i => i . GetFieldName ( ) == el . GetFieldName ( ) ) ;
283+ if ( item != null )
267284 {
268- var item = items . FirstOrDefault ( i => i . GetFieldName ( ) == el . GetFieldName ( ) ) ;
269- if ( item != null )
285+ // 过滤掉不编辑与不可见的列
286+ if ( el . GetIgnore ( ) || ! el . IsVisible ( ItemChangedType , IsSearch . Value ) || string . IsNullOrEmpty ( el . GetFieldName ( ) ) )
270287 {
271- // 过滤掉不编辑与不可见的列
272- if ( el . GetIgnore ( ) || ! el . IsVisible ( ItemChangedType , IsSearch . Value ) )
273- {
274- items . Remove ( item ) ;
275- }
276- else
277- {
278- // 设置只读属性与列模板
279- item . CopyValue ( el ) ;
280- }
288+ columns . Remove ( item ) ;
289+ }
290+ else
291+ {
292+ // 设置只读属性与列模板
293+ item . CopyValue ( el ) ;
281294 }
282295 }
283- _formItems . AddRange ( items . Where ( i => ! string . IsNullOrEmpty ( i . GetFieldName ( ) ) ) ) ;
284- }
285- else
286- {
287- _formItems . AddRange ( _editorItems . Where ( i => ! i . GetIgnore ( )
288- && ! string . IsNullOrEmpty ( i . GetFieldName ( ) )
289- && i . IsVisible ( ItemChangedType , IsSearch . Value ) ) ) ;
290296 }
297+ items . AddRange ( columns ) ;
298+ }
299+ else
300+ {
301+ items . AddRange ( _editorItems . Where ( i => ! i . GetIgnore ( )
302+ && ! string . IsNullOrEmpty ( i . GetFieldName ( ) )
303+ && i . IsVisible ( ItemChangedType , IsSearch . Value ) ) ) ;
291304 }
292305 }
306+ return items ;
293307 }
294308
295309 private RenderFragment AutoGenerateTemplate ( IEditorItem item ) => builder =>
@@ -301,7 +315,7 @@ private RenderFragment AutoGenerateTemplate(IEditorItem item) => builder =>
301315 else
302316 {
303317 item . PlaceHolder ??= PlaceHolderText ;
304- builder . CreateComponentByFieldType ( this , item , Model , ItemChangedType , IsSearch . Value , LookupService ) ;
318+ builder . CreateComponentByFieldType ( this , item , Model , ItemChangedType , IsSearch . Value ) ;
305319 }
306320 } ;
307321
0 commit comments