Mam obiekt słownikowy <string, string>
i chcę go powiązać z repeateriem. Jednak nie jestem pewien, co umieścić w znacznikach aspx
, aby faktycznie wyświetlić parę klucz-wartość. Nie są zgłaszane żadne błędy i mogę je uruchomić z List
. Jak mogę uzyskać słownik do wyświetlenia w repeterze?Powiąż słownik dla repeatera
Odpowiedz
IDictionary<TKey,TValue>
jest również ICollection<KeyValuePair<TKey, TValue>>
.
trzeba wiązać się coś takiego (niesprawdzone):
((KeyValuePair<string,string>)Container.DataItem).Key
((KeyValuePair<string,string>)Container.DataItem).Value
Zauważ, że kolejność w jakiej są zwracane elementy jest niezdefiniowany. Mogą zostać zwrócone w zamówieniu reklamowym dla małych słowników, ale nie jest to gwarantowane. Jeśli potrzebujesz gwarantowanego zamówienia, sortuj według klucza.
Jeśli potrzebujesz innej kolejności sortowania (np. Według wartości), możesz utworzyć List<KeyValuePair<string,string>>
par klucz-wartość, posortować ją i powiązać z posortowaną listą.
Odpowiedź: Kiedyś ten kod w znacznikach, aby wyświetlić klucz i wartość indywidualnie:
<%# DataBinder.Eval((System.Collections.Generic.KeyValuePair<string, string>)Container.DataItem,"Key") %>
<%# DataBinder.Eval((System.Collections.Generic.KeyValuePair<string, string>)Container.DataItem,"Value") %>
Powiąż zbiór wartości w słowniku.
myRepeater.DataSource = myDictionary.Values
myRepeater.DataBind()
Dzięki. Chciałbym wyświetlić klawisze i wartości, więc użyłem po prostu 'myDictionary'. W znaczniku użyłem '<% # Container.DataItem.ToString()%>.Działa to, ale pokazuje zarówno klucz, jak i wartość jako jeden "przedmiot". Czy istnieje sposób na uzyskanie "klucza" i "wartości" indywidualnie, aby można je było sformatować osobno? – XSL
Tak. Obiekty w słowniku to KeyValuePairs, więc możesz rzucić DataItem jak Joe pokazuje w swojej odpowiedzi. –
<%# Eval("key")%>
pracował dla mnie.
Wpisz właściwość w polu z kodem typu wpisu w powiązanym słowniku. Powiedzmy na przykład, że wiążę Dictionary<Person, int>
z moim Repeater. Chciałbym pisać (w języku C#) właściwość jak to w moim kodu źródłowego:
protected KeyValuePair<Person, int> Item
{
get { return (KeyValuePair<Person, int>)this.GetDataItem(); }
}
Wtedy, moim zdaniem można używać segmentów kodu tak:
<span><%# this.Item.Key.FirstName %></span>
<span><%# this.Item.Key.LastName %></span>
<span><%# this.Item.Value %></span>
To sprawia, że o wiele czystsze znaczników . I chociaż wolałbym mniej ogólnych nazw dla przywoływanych wartości, wiem, że Item.Key
to Person
i Item.Value
jest int
i są one mocno wpisane jako takie.
Możesz (czytaj: powinien), oczywiście, zmień nazwę na Item
na coś bardziej symbolicznego niż wpis w słowniku. Samo to pomoże zmniejszyć wszelką niejednoznaczność w nazewnictwie w moim przykładzie użycia.
Jest z pewnością nic by uniemożliwić definiowania dodatkową właściwość, powiedzieć tak:
protected Person CurrentPerson
{
get { return ((KeyValuePair<Person, int>)this.GetDataItem()).Key; }
}
i używanie go w znacznikach wygląda następująco:
<span><%# this.CurrentPerson.FirstName %></span>
... o co zapobiega żaden możesz także uzyskać dostęp do odpowiedniego wpisu w słowniku: .Value
.
- 1. Niestandardowy słownik dla Tesseract
- 2. Orientacja pozioma w sterowaniu Repeatera
- 3. Powiąż zdarzenia do ViewModel
- 4. Ustalanie liczby wierszy repeatera w asp.net
- 5. Eksportować do programu Excel z repeatera?
- 6. Powiąż wątki z procesorami
- 7. Powiąż z coffeespptem
- 8. Powiąż kolekcję z StackPanel
- 9. Powiąż bibliotekę Pythona TO C
- 10. Powiąż obiekt z aplikacją App.xaml.cs
- 11. Słownik dwukierunkowy?
- 12. Powiąż obiekt ObservableCollection z ListView
- 13. Powiąż zmienne z funkcją zwrotną
- 14. Zagnieżdżony słownik
- 15. .NET: przełącznik vs słownik dla kluczy strunowych
- 16. Słownik hebrajski dla PostgreSQL na Heroku?
- 17. Powiąż ponownie typy plików dla wizualnego studia 2012
- 18. Powiąż Nullable DateTime z MaskedTextBox
- 19. Powiąż datepicker datepicker z knockoutjs
- 20. Powiąż z rozmiarem elementu (div)
- 21. Powiąż listę klas do DataGridView
- 22. Powiąż właściwość ICollectionView.Count w XAML
- 23. Czy istnieje kontrolka repeatera silverlight (jak w ASP.NET)?
- 24. uzyskać wartość z pola tekstowego w ramach repeatera asp.net C#
- 25. Słownik wielowartościowy
- 26. Powiąż wiele zdarzeń z metodą "żywych" jQuery
- 27. Powiąż dowolny dokument XML z WPF TreeView
- 28. Powiąż macierzysty datacontext (z zasobów pozycji)
- 29. Powiąż źródło danych JNDI w tomcat?
- 30. Słownik danych pakowania R
Czy istnieje sposób zwrotu przedmiotów w określonej kolejności? W mojej (bardzo krótkim teście) liście 4 przedmiotów są one zwracane w kolejności, w jakiej zostały umieszczone. – XSL
To wygląda na dużo narzutów bez powodu w .net ..... – Spacemonkey