2010-02-17 2 views
0

Je suis gêné de demander, mais quelle est la meilleure façon d'ajouter des données de paire clé/valeur dans le cache (HttpRuntime.Cache) à un DataTable?Comment ajouter des données du cache à un DataTable?

Je vide actuellement les données de paire clé/valeur du cache dans un HashTable, qui devient le DataSource pour un objet Repeater. Malheureusement, je ne peux pas trier les données dans le HashTable et donc pensé un DataTable (étant le DataSource pour le répéteur) permettrait de résoudre mon dilemme.

+0

- Salut, tout le monde. Merci pour les bons commentaires. Alors que je suis obligé d'utiliser vos solutions, serait-il possible de savoir comment on peut lier les données du cache à un DataTable? – Yoav

Répondre

1

Si vous voulez simplement copier chaque clé/valeur paire du cache à un DataTable:

DataTable table = new DataTable(); 
table.Colums.Add("key", typeof(string)); 
table.Colums.Add("value", typeof(string)); 

foreach (DictionaryEntry entry in HttpRuntime.Cache) 
{ 
    table.Rows.Add(entry.Key, entry.Value); 
} 

Cela suppose que les deux touches et val Les ue sont de type string, mais si ce n'est pas le cas, remplacez simplement les types mentionnés dans les lignes 2 et 3 du code.

nouvellement créé DataTable peut être lié à un Repeater en utilisant le code comme ceci:

myRepeater.DataSource = table; 
myRepeater.DataBind(); 
0

Y a-t-il une raison pour laquelle vous ne voulez pas stocker la table de données d'origine dans votre cache? (En plus du poids élevé évident de l'objet, je veux dire?) Est-ce quelque chose que vous pouvez partager entre tous les utilisateurs en mode lecture seule? Si oui, c'est probablement un bon candidat pour la mise en cache dans un format (peut-être IDictionary?).

1

Avez-vous eu un coup d'œil à SortedList Class, ou SortedDictionary Class

Représente une collection de clé/valeur paires qui sont triées par clé basée sur le IComparer associé < (de < (T>)>) mise en œuvre.

0

Ou vous pouvez créer votre propre classe ayant les propriétés qu'il sera lient au répéteur plus tard et les ajouter dans la liste de ce type et vous pouvez les trier facilement par LINQ

//your data container class 
public class MyClass 
    { 
     public string Name { get; set; } 
    } 

//Put all classes into the list before caching it 
List<MyClass> source = new List<MyClass>() ; 

//use this to sort with any kind of data inside your own defined class 
var sortedResult = source.OrderBy(x => x.Name); 
0
This should do the trick: 

Sub Main() Handles Me.Load 
    Dim Hash As New Hashtable 

    Hash.Add("Tom", "Arnold") 
    Hash.Add("Sly", "Stallone") 

    HashToDataTable(Hash) 
End Sub 

Function HashToDataTable(ByVal Hash As Hashtable) As Data.DataTable 
    Dim Table As New Data.DataTable() 

    Table.Columns.Add("Key", GetType(String)) 
    Table.Columns.Add("Value", GetType(Object)) 'You can use any type you want. 

    For Each Key In Hash.Keys 
     Table.Rows.Add(Key, Hash(Key)) 
    Next 

    Return Table 
End Function 
Questions connexes