Niestandardowe elementy w liście <MudAutocomplete>

Niestandardowe elementy w liście <MudAutocomplete>
V3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 283
0

Dzień dobry,

mam klasę o poniższej strukturze:

Kopiuj
IList<Kontrahent> Items = new List<Kontrahent>();

public class Kontrahent
{
    public int Id { get; set; }
    public string? Imie { get; set; }
    public string? Nazwisko { get; set; }
    public string? Telefon { get; set; }
}

Do której wczytywane są dane za pomocą poniższego polecenia:

Kopiuj
protected override async Task OnInitializedAsync()
{
    Items = await baza.GetOfCustomers();
}

Teraz jak zrobić aby w poleceniu <MudAutocomplete> podpowiadała się cała nazwa z połączenia kontrahent.Imie oraz kontrahent.Nazwisko, a po wyborze konkretnej pozycji pobrało mi dane z kontrahent.ID

Poniżej coś próbowałem zrobić, ale zbytnio nie wychodzi :(

Kopiuj
<MudAutocomplete T="Kontrahent" Label="Kontrahent:" SearchFunc="@SearchItem" Required="true" />

  private async Task<IEnumerable<Kontrahent>> SearchItem(string value)
  {
      if (string.IsNullOrEmpty(value))
      {
          return Items;
      }
      else
      {
      //    await ReadAutoCompleteData(value);
      }
      return Items.Where(x => x.Imie != null && x.Nazwisko.Contains(value, StringComparison.InvariantCultureIgnoreCase));
  }

Aktualizacja:
Mój problem udało mi się rozwiązać. Może komuś przyda się jak wzór.

Kopiuj
<MudAutocomplete T="Kontrahent" ValueChanged="OnValueChanged" Label="Kontrahent:" SearchFunc="@SearchItem" ToStringFunc="@(e=> e==null?null : $"{e.Imie} {e.Nazwisko} - tel: {e.Telefon}")" Strict="false" Required="true" />

@code {

    List<Kontrahent> Items = new List<Kontrahent>();

    public void OnValueChanged(Kontrahent args)

    {

        Console.WriteLine("ID:" + args.Id);

    }

    private async Task<IEnumerable<Kontrahent>> SearchItem(string value)
    {
        if (string.IsNullOrEmpty(value))
        {
            return Items;
        }
        return Items.Where(x => x.Imie.Contains(value, StringComparison.InvariantCultureIgnoreCase));
    }


    protected override async Task OnInitializedAsync()
    {
        Items = await baza.GetOfCustomers();
    }


Dodatkowo jeżeli chcemy aby szukało nam wartości zarówno po Imieniu, Nazwisku oraz Telefonie to modyfikujemy to w następujący sposób:

Kopiuj
 return Items.Where(x => x.Imie.Contains(value, StringComparison.InvariantCultureIgnoreCase) || x.Nazwisko.Contains(value, StringComparison.InvariantCultureIgnoreCase) || x.Telefon.Conta

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
0

w normalnym C# string nie potrzebuje pytajnika. W blazorze jest inaczej ?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.