Blazor - component generyczny + Virtualize + EditForm (InputText)

0

Cześć,
Tworzę własny component w blazor korzystający z typu generycznego (@typeparam TItem).
Component posiada listę: private List<TItem> FilteredDataItems { get; set; }, które wyświetlane są w tabeli za pomocą componentu(?) Virtualize.
W przypadku, gdy dane mają być wyświetlone w prosty sposób to robię to w ten sposób:

			<Virtualize Context="item" Items="FilteredDataItems">
				<tr>
				@foreach(var column in columns)
					{
					<td align="@column.HorizontalAlignment.ToString().ToLower()">
							@GetValue(item, column)
					</td>

					}
				</tr>
			</Virtualize>

Gdzie GetValue to funkcja, która zwraca dane z obiektów przekonwertowane na string wg odpowiedniego formatu.

Próbuje jednak zaimplementować opcję wyświetlenia danych w inputach (Opcja edycji klikniętego wiersza). Nie bardzo wiem jak powiązać InputText (lub inny input) z moim obiektem. Próbowałem różnych wariantów w stylu:

			<Virtualize Context="item" Items="FilteredDataItems">
				<tr>
					<EditForm Model="item">
					<DataAnnotationsValidator />
					@foreach(var column in columns)
						{
						<td align="@column.HorizontalAlignment.ToString().ToLower()">
							@*@GetValue(item, column)*@
							<InputText @bind-Value="typeof(TItem).GetProperty(Name).GetValue(item)" />
						</td>
					}
					</EditForm>
				</tr>
			</Virtualize>

ale to nie działa. Czy możecie wskazać jak należy powiązać property z typu generycznego w EditForm?
Dane mogą być różnych typów a kolumny mogą być przestawiane.

Z góry dziękuję za pomoc.

0

Cześć,
ja robiłem w ten sposób, że dzieliłem powiązanie na 2:
Value="PobranieWartosci(item)" ValueChanged ="(e)=>UstawienieWartosci(item,e)"
Oczywiście można to szerzej dostosować, ale zasada ta sama - pobranie i ustawienie wartości w 2 różnych funkcjach/metodach.

0
areklipno napisał(a):

Cześć,
ja robiłem w ten sposób, że dzieliłem powiązanie na 2:
Value="PobranieWartosci(item)" ValueChanged ="(e)=>UstawienieWartosci(item,e)"
Oczywiście można to szerzej dostosować, ale zasada ta sama - pobranie i ustawienie wartości w 2 różnych funkcjach/metodach.

No tak, tylko jak stworzyć funkcję PobranieWartosci(item) oraz UstawienieWartosci(item,e) aby po włączeniu programu nie wywalało wyjątku?
Podejrzewam, że ma również znaczenie, że zmienne mogą być różnych typów (int, string, decimal etc.)

0
Michx Kowal napisał(a):
areklipno napisał(a):

Cześć,
ja robiłem w ten sposób, że dzieliłem powiązanie na 2:
Value="PobranieWartosci(item)" ValueChanged ="(e)=>UstawienieWartosci(item,e)"
Oczywiście można to szerzej dostosować, ale zasada ta sama - pobranie i ustawienie wartości w 2 różnych funkcjach/metodach.

No tak, tylko jak stworzyć funkcję PobranieWartosci(item) oraz UstawienieWartosci(item,e) aby po włączeniu programu nie wywalało wyjątku?
Podejrzewam, że ma również znaczenie, że zmienne mogą być różnych typów (int, string, decimal etc.)

Przy pobraniu wartości tak jak miałeś + "ToString()"

typeof(TItem).GetProperty(Name).GetValue(item).ToString()

a ustawienie wartości

typeof(TItem).GetProperty(Name).SetValue(item, e)

1 użytkowników online, w tym zalogowanych: 0, gości: 1