2010-02-17 46 views
0

我很尷尬的問,但是將緩存(HttpRuntime.Cache)中的鍵/值對數據添加到DataTable的最佳方式是什麼?如何將數據從緩存添加到DataTable?

我目前正在將緩存中的鍵/值對數據轉儲到HashTable,這成爲Repeater對象的DataSource。不幸的是,我無法對HashTable中的數據進行排序,因此認爲DataTable(Repeater的DataSource)可以解決我的難題。

+0

- 嗨,大家好。感謝您的好評。雖然我不得不使用您的解決方案,但有可能知道如何將數據從緩存綁定到DataTable? – Yoav 2010-02-17 18:00:21

回答

1
容易對它們進行排序類

如果你只是想每個鍵/值對從緩存複製到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); 
} 

這是假定這兩個鍵和Val你的類型爲string,但如果不是這種情況,只需更換代碼中第2行和第3行中提到的類型即可。

新創建DataTable可以使用這樣的代碼被綁定到一個Repeater

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

是否有某些原因您不想將原始數據表存儲在緩存中? (除了明顯的高對象重量,我的意思是?)是否可以以只讀方式在所有用戶之間共享?如果是這樣,它可能是一個很好的候選緩存的某種格式(可能是IDictionary?)。

0

或者你也可以創建自己有將被綁定到中繼器以後的屬性,並將它們添加到該類型的服務,您可以通過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 
相關問題