@@ -42,7 +42,7 @@ public partial class Select<TValue> : ISelect, ILookup
4242 . AddClass ( $ "text-danger", IsValid . HasValue && ! IsValid . Value )
4343 . Build ( ) ;
4444
45- private bool GetClearable ( ) => IsClearable && ! IsDisabled ;
45+ private bool GetClearable ( ) => IsClearable && ! IsDisabled && IsNullable ( ) ;
4646
4747 /// <summary>
4848 /// 设置当前项是否 Active 方法
@@ -294,15 +294,17 @@ private SelectedItem? SelectedRow
294294
295295 private SelectedItem ? GetSelectedRow ( )
296296 {
297-
298- var canBeNull = ValueCanBeNull ( ) ;
297+ if ( Value is null )
298+ {
299+ return null ;
300+ }
301+
299302 var item = GetItemWithEnumValue ( )
300303 ?? Rows . Find ( i => i . Value == CurrentValueAsString )
301304 ?? Rows . Find ( i => i . Active )
302- ?? Rows . FirstOrDefault ( i => ! i . IsDisabled && ! canBeNull )
305+ ?? Rows . FirstOrDefault ( i => ! i . IsDisabled )
303306 ?? GetVirtualizeItem ( CurrentValueAsString ) ;
304-
305-
307+
306308 if ( item != null )
307309 {
308310 if ( _init && DisableItemChangedWhenFirstRender )
@@ -396,7 +398,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
396398 /// </summary>
397399 private int TotalCount { get ; set ; }
398400
399- private List < SelectedItem > GetVirtualItems ( ) => FilterBySearchText ( GetRowsByItems ( ) ) . ToList ( ) ;
401+ private List < SelectedItem > GetVirtualItems ( ) => [ .. FilterBySearchText ( GetRowsByItems ( ) ) ] ;
400402
401403 /// <summary>
402404 /// 虚拟滚动数据加载回调方法
@@ -542,7 +544,6 @@ private async Task SelectedItemChanged(SelectedItem item)
542544 {
543545 if ( _lastSelectedValueString != item . Value )
544546 {
545-
546547 item . Active = true ;
547548 SelectedItem = item ;
548549
@@ -559,7 +560,7 @@ private async Task SelectedItemChanged(SelectedItem item)
559560 }
560561
561562 /// <summary>
562- /// 添加静态下拉项方法
563+ /// <inheritdoc/>
563564 /// </summary>
564565 /// <param name="item"></param>
565566 public void Add ( SelectedItem item ) => _children . Add ( item ) ;
@@ -579,50 +580,18 @@ private async Task OnClearValue()
579580 {
580581 await OnClearAsync ( ) ;
581582 }
582-
583- if ( ValueCanBeNull ( ) )
584- {
585583
586- if ( SelectedItem != null ) SelectedItem . Active = false ;
587- SelectedItem = null ;
588- if ( Items != null ) //数据中存在多个IsActive= true的 需要都清空
589- foreach ( var nowItems in Items )
590- {
591- nowItems . Active = false ;
592- }
593- // 触发 StateHasChanged
594- _lastSelectedValueString = string . Empty ;
595- CurrentValueAsString = _lastSelectedValueString ;
596- this . Value = default ;
597- if ( this . ValueChanged . HasDelegate )
598- await this . ValueChanged . InvokeAsync ( default ) ;
599- // 触发 SelectedItemChanged 事件--由于设置成了null
600- //if (OnSelectedItemChanged != null)
601- //{
602- // await OnSelectedItemChanged(SelectedItem);
603- //}
604- return ;
605- }
606- SelectedItem ? item ;
607584 if ( OnQueryAsync != null )
608585 {
609586 await VirtualizeElement . RefreshDataAsync ( ) ;
610- item = _result . Items . FirstOrDefault ( ) ;
611587 }
612- else
613- {
614- item = Items . FirstOrDefault ( ) ;
615- }
616- if ( item != null )
617- {
618- await SelectedItemChanged ( item ) ;
619- }
620- }
621- private bool ValueCanBeNull ( )
622- {
623- var tType = typeof ( TValue ) ;
624- return ! tType . IsValueType || Nullable . GetUnderlyingType ( tType ) != null ;
588+
589+ _lastSelectedValueString = string . Empty ;
590+ CurrentValue = default ;
625591 }
592+
593+ private bool IsNullable ( ) => ! ValueType . IsValueType || NullableUnderlyingType != null ;
594+
626595 private string ? ReadonlyString => IsEditable ? null : "readonly" ;
627596
628597 private async Task OnChange ( ChangeEventArgs args )
0 commit comments