<%@ Page Language="C#" %> <%@ import Namespace="System" %> <%@ import Namespace="System.Configuration" %> <%@ import Namespace="System.Collections" %> <%@ import Namespace="System.Collections.Specialized" %> <%@ import Namespace="System.Data" %> <script runat="server"> //Based on Alex Lowe's CacheViewer: http://aspalliance.com/aldotnet/examples/cacheviewer.aspx private void Page_Load(object sender, System.EventArgs e) { if(!IsPostBack) { hlRefresh.NavigateUrl = Request.RawUrl; //In a cluster, it might be nice to know which machine we are on. litMachine.Text = System.Environment.MachineName; //Bind CachedItems BindGrid(); } } //Bind the grid with items found in the cache. private void BindGrid() { //Create an arraylist to hold our cacheditem details ArrayList al = new ArrayList(); //Get enumerator IDictionaryEnumerator CacheEnum = Cache.GetEnumerator(); //loop while (CacheEnum.MoveNext()) { try { //Do we want to include this item if(IncludeInList(CacheEnum.Key.ToString())) { IList il = CacheEnum.Value as IList; if(il != null) al.Add(new CachedItem(CacheEnum.Key.ToString(),CacheEnum.Value.GetType().ToString(), il.Count)); else al.Add(new CachedItem(CacheEnum.Key.ToString(),CacheEnum.Value.GetType().ToString())); } } catch{} } //set counter Literal litCount.Text = al.Count.ToString(); //Bind dgCachedItems.DataSource = al; dgCachedItems.DataBind(); } //Remove item found on this row protected void Grid_ItemCommand(object sender, DataGridCommandEventArgs e) { Literal l = (Literal)e.Item.FindControl("CacheItemName"); //make sure we found something :) if(l != null) { Cache.Remove(l.Text); } this.BindGrid(); } //Add quick counter column, probably could have done this in CachedItem as well protected void Grid_Created(object sender, DataGridItemEventArgs e) { if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { ((Literal)e.Item.FindControl("Counter")).Text = (e.Item.ItemIndex + 1).ToString(); } } //We only want to include what we put in the cache private bool IncludeInList(string text) { if(string.Compare(text,0,"ISAPIWo",0,7,true) != 0) { return (string.Compare(text,0,"System",0,6,true) != 0); } return false; } //quick holding item to bind grid with private class CachedItem { public CachedItem(){} public CachedItem(string key, string type, int count) { this.CacheKey = key; this.CacheType = type; this._count = count.ToString(); } public CachedItem(string key, string type):this(key,type,0) {} private string _cacheKey; public string CacheKey { get {return this._cacheKey;} set {this._cacheKey = value;} } private string _cacheType; public string CacheType { get {return this._cacheType;} set {this._cacheType = value;} } private string _count; public string Count { get{return _count;} } } //Remove All? Loop through collection removing each item we find void lbRemoveAll_Click(object sender, EventArgs e) { IDictionaryEnumerator CacheEnum = Cache.GetEnumerator(); while (CacheEnum.MoveNext()) { try { if(IncludeInList(CacheEnum.Key.ToString())) { Cache.Remove(CacheEnum.Key.ToString()); } } catch{} } //Rebind grid..although nothing will be there. //Maybe just call Items.Clear();...maybe something new will be added BindGrid(); } </script> <html> <head> </head> <body> <form runat="server"> <p> View (and remove) Cached Items <br /> Machine: <asp:Literal id="litMachine" runat="server"></asp:Literal> <br /> Count: <asp:Literal id="litCount" runat="server"></asp:Literal> <br /> <asp:LinkButton id="lbRemoveAll" onclick="lbRemoveAll_Click" runat="server">Clear Cache</asp:LinkButton> </p> <p> <asp:DataGrid id="dgCachedItems" runat="server" OnItemCommand="Grid_ItemCommand" AutoGenerateColumns="False" OnItemCreated="Grid_Created"> <Columns> <asp:TemplateColumn HeaderText="Count"> <ItemTemplate> <asp:Literal id="Counter" runat="server" /> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Name (Key)"> <ItemTemplate> <asp:Literal id="CacheItemName" runat="server" text='<%# ((CachedItem)(Container.DataItem)).CacheKey %>' /> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Data Type"> <ItemTemplate> <asp:Literal id="CacheItemDataType" runat="server" text='<%# ((CachedItem)(Container.DataItem)).CacheType %>' /> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Items"> <ItemTemplate> <asp:Literal id="CacheItemDataCount" runat="server" text='<%# ((CachedItem)(Container.DataItem)).Count %>' /> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Remove"> <ItemTemplate> <asp:LinkButton ID="RemoveButton" Text="Remove" CommandName="RemoveFromCache" runat="server" /> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:DataGrid> </p> <p> <asp:HyperLink id="hlRefresh" Text="Refresh" Runat="server"></asp:HyperLink> </p> </form> </body> </html>