Imports System.IO Imports System.Data Imports System.Xml PartialClass CacheDependencyClass CacheDependency Inherits System.Web.UI.Page PrivateConst strFilePath AsString="C:Documents and Settings ujunMy DocumentsVisual Studio 2005ASPDotNET2App_DataComputer.xml" Private removedReason AsString '从XML文件中读取数据,并将包含数据的DataTable进行返回; PublicFunction LoadXMLFile()Function LoadXMLFile() As DataTable If (File.Exists(strFilePath) =True) Then Dim ds AsNew DataSet ds.ReadXml(strFilePath) Return (ds.Tables(0)) Else Me.MsgBox("作为数据源的XML文件不存在!请检查。") Return (Nothing) EndIf End Function '根据DataTable中的内容生成缓存; PublicSub UpdateCache()Sub UpdateCache(ByVal dtComputerInfo As DataTable) Dim dep AsNew System.Web.Caching.CacheDependency(strFilePath, DateTime.Now) Cache.Insert("computerInfo", dtComputerInfo, dep, DateTime.MaxValue, TimeSpan.Zero, CacheItemPriority.Default, New CacheItemRemovedCallback(AddressOf CacheItemRemoved)) End Sub '根据文本框的输入更新XML文件; PublicSub ModifyXMLFile()Sub ModifyXMLFile() If (File.Exists(strFilePath) =True) Then Dim dtXMLFile As DataTable =Me.LoadXMLFile() If (Not dtXMLFile IsNothing) Then Dim dr As DataRow = dtXMLFile.NewRow '如果TextBox中为空,那么替换空字符串(String.Empty)的默认值; Dim defaultValue AsString="--" If (TextBox1.Text <>String.Empty) Then dr.Item("choice") = TextBox1.Text Else dr.Item("choice") = defaultValue EndIf If (TextBox2.Text <>String.Empty) Then dr.Item("price") = TextBox2.Text Else dr.Item("price") = defaultValue EndIf If (TextBox3.Text <>String.Empty) Then dr.Item("url") = TextBox3.Text Else dr.Item("url") = defaultValue EndIf dtXMLFile.Rows.Add(dr) '通过文件流,重新向XML文件中写入新的数据源内容; Dim fs AsNew FileStream(strFilePath, FileMode.Open, FileAccess.Write, FileShare.ReadWrite) dtXMLFile.WriteXml(fs) fs.Close() '重新绑定GridView Me.BoundGridView(dtXMLFile) 'Cache.Remove("computerInfo") '由于缓存(Cache)以来的XML文件的内容发生了变化,Cache将被清除, '这里需要通过调用此函数来重建缓存和缓存依赖项; Me.UpdateCache(dtXMLFile) Else Me.MsgBox("dtXMLFile为空(Nothing)") EndIf Else Me.MsgBox("作为数据源的XML文件不存在!请检查。") Return EndIf End Sub '用于弹出提示窗口; PublicSub MsgBox()SubMsgBox(ByVal message AsString) ClientScript.RegisterStartupScript(ClientScript.GetType(), "reminderInfo", message) End Sub '缓存(Cache)清除时的回调函数(CallBack),在页面中显示缓存清除的原因; PrivateSub CacheItemRemoved()Sub CacheItemRemoved(ByVal key AsString, ByVal value AsObject, ByVal removeReason As CacheItemRemovedReason) Label1.Text ="移除Cache项的原因是: "& removeReason.ToString() End Sub '将GridView控件绑定到数据源以显示数据源信息; PrivateSub BoundGridView()Sub BoundGridView(ByVal dtDataSource As DataTable) If (Not dtDataSource IsNothing) Then GridView1.DataSource = dtDataSource GridView1.DataBind() EndIf End Sub '页面载入函数;判断是否存在缓存,如果存在缓存就直接通过将GridView绑定到缓存数据来显示信息; '如果不存在缓存则通过读取XML文件内容,重新建立缓存; ProtectedSub Page_Load()Sub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load If (Not Page.IsPostBack) Then Dim dtDataSource As DataTable If (Cache("computerInfo") IsNothing) Then dtDataSource =Me.LoadXMLFile() Me.UpdateCache(dtDataSource) Else dtDataSource =CType(Cache("computerInfo"), DataTable) EndIf Me.BoundGridView(dtDataSource) EndIf End Sub '触发XML修改的按钮响应函数; ProtectedSub Button1_Click()Sub Button1_Click(ByVal sender AsObject, ByVal e As System.EventArgs) Handles Button1.Click Me.ModifyXMLFile() End Sub End Class