@@ -459,7 +459,8 @@ public static void CreateDisplayByFieldType(this RenderTreeBuilder builder, IEdi
459459 /// <param name="item"></param>
460460 /// <param name="changedType"></param>
461461 /// <param name="isSearch"></param>
462- public static void CreateComponentByFieldType ( this RenderTreeBuilder builder , ComponentBase component , IEditorItem item , object model , ItemChangedType changedType = ItemChangedType . Update , bool isSearch = false )
462+ /// <param name="lookupService"></param>
463+ public static void CreateComponentByFieldType ( this RenderTreeBuilder builder , ComponentBase component , IEditorItem item , object model , ItemChangedType changedType = ItemChangedType . Update , bool isSearch = false , ILookupService ? lookupService = null )
463464 {
464465 var fieldType = item . PropertyType ;
465466 var fieldName = item . GetFieldName ( ) ;
@@ -468,8 +469,7 @@ public static void CreateComponentByFieldType(this RenderTreeBuilder builder, Co
468469 var fieldValue = GenerateValue ( model , fieldName ) ;
469470 var fieldValueChanged = GenerateValueChanged ( component , model , fieldName , fieldType ) ;
470471 var valueExpression = GenerateValueExpression ( model , fieldName , fieldType ) ;
471- var lookup = item . Lookup ;
472- var componentType = item . ComponentType ?? GenerateComponentType ( fieldType , item . Rows != 0 , lookup ) ;
472+ var componentType = item . ComponentType ?? GenerateComponentType ( item ) ;
473473 builder . OpenComponent ( 0 , componentType ) ;
474474 if ( componentType . IsSubclassOf ( typeof ( ValidateBase < > ) . MakeGenericType ( fieldType ) ) )
475475 {
@@ -513,20 +513,22 @@ public static void CreateComponentByFieldType(this RenderTreeBuilder builder, Co
513513 }
514514
515515 // Nullable<bool?>
516- if ( item . ComponentType == typeof ( Select < bool ? > ) && fieldType == typeof ( bool ? ) && lookup == null && item . Items == null )
516+ if ( item . ComponentType == typeof ( Select < bool ? > ) && fieldType == typeof ( bool ? ) && ! item . IsLookup ( ) && item . Items == null )
517517 {
518518 builder . AddAttribute ( 100 , nameof ( Select < bool ? > . Items ) , GetNullableBoolItems ( model , fieldName ) ) ;
519519 }
520520
521521 // Lookup
522- if ( lookup != null && item . Items == null )
522+ if ( item . IsLookup ( ) && item . Items == null )
523523 {
524524 builder . AddAttribute ( 110 , nameof ( Select < SelectedItem > . ShowSearch ) , item . ShowSearchWhenSelect ) ;
525- builder . AddAttribute ( 120 , nameof ( Select < SelectedItem > . Items ) , lookup . Clone ( ) ) ;
525+ builder . AddAttribute ( 120 , nameof ( Select < SelectedItem > . LookupService ) , lookupService ) ;
526+ builder . AddAttribute ( 121 , nameof ( Select < SelectedItem > . LookupServiceKey ) , item . LookupServiceKey ) ;
527+ builder . AddAttribute ( 122 , nameof ( Select < SelectedItem > . LookupServiceData ) , item . LookupServiceData ) ;
526528 builder . AddAttribute ( 130 , nameof ( Select < SelectedItem > . StringComparison ) , item . LookupStringComparison ) ;
527529 }
528530
529- // 增加非枚举类,手动设定 ComponentType 为 Select 并且 Data 有值 自动生成下拉框
531+ // 增加非枚举类,手动设定 ComponentType 为 Select 并且 Items 有值 自动生成下拉框
530532 if ( item . Items != null && item . ComponentType == typeof ( Select < > ) . MakeGenericType ( fieldType ) )
531533 {
532534 builder . AddAttribute ( 140 , nameof ( Select < SelectedItem > . Items ) , item . Items . Clone ( ) ) ;
@@ -615,15 +617,13 @@ object ComplexPropertyValueExpression()
615617 /// <summary>
616618 /// 通过指定类型生成组件类型
617619 /// </summary>
618- /// <param name="fieldType"></param>
619- /// <param name="hasRows">是否为 TextArea 组件</param>
620- /// <param name="lookup"></param>
621- /// <returns></returns>
622- private static Type GenerateComponentType ( Type fieldType , bool hasRows , IEnumerable < SelectedItem > ? lookup )
620+ /// <param name="item"></param>
621+ private static Type GenerateComponentType ( IEditorItem item )
623622 {
623+ var fieldType = item . PropertyType ;
624624 Type ? ret = null ;
625625 var type = ( Nullable . GetUnderlyingType ( fieldType ) ?? fieldType ) ;
626- if ( type . IsEnum || lookup != null )
626+ if ( type . IsEnum || item . IsLookup ( ) )
627627 {
628628 ret = typeof ( Select < > ) . MakeGenericType ( fieldType ) ;
629629 }
@@ -649,7 +649,7 @@ private static Type GenerateComponentType(Type fieldType, bool hasRows, IEnumera
649649 }
650650 else if ( fieldType == typeof ( string ) )
651651 {
652- ret = hasRows ? typeof ( Textarea ) : typeof ( BootstrapInput < > ) . MakeGenericType ( typeof ( string ) ) ;
652+ ret = item . Rows > 0 ? typeof ( Textarea ) : typeof ( BootstrapInput < > ) . MakeGenericType ( typeof ( string ) ) ;
653653 }
654654 return ret ?? typeof ( BootstrapInput < > ) . MakeGenericType ( fieldType ) ;
655655 }
0 commit comments