2009-09-08 82 views
0

你能看看下面的代碼,並告訴我如何解決這個問題。每次在日曆中呈現一天時,都會調用webservice(service.EventGetList(「ALL」) )。它導致頁面非常緩慢。我如何才能調用webservice一次,仍然達到相同的結果?ASP.NET天呈現問題

Protected Sub calendar1_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) Handles calendar1.DayRender 

     WordFoundAt = -1 'not found 

     'declare a new dataset 
     Dim ds As New DataSet("MyDataSet") 

     'declare a new datatable 
     Dim dTable As New DataTable("EventsData") 

     'decalre a new datarow 
     Dim dr As DataRow 

     'assign all events from the webservice 
     openEvents = service.EventGetList("ALL") 

     'build the columns for the datatable 
     dTable.Columns.Add("Id", GetType(String)) 
     dTable.Columns.Add("Title", GetType(String)) 
     dTable.Columns.Add("EventStart", GetType(DateTime)) 
     dTable.Columns.Add("EventEnd", GetType(DateTime)) 


     Dim dr1 As DataRow() 

     ' ds.Tables.Add(dTable) 
     Dim i As Integer = 0 
     For Each currEvent In openEvents 

      'assign local variables to the properties of the events in the array 
      id1 = openEvents(i).id 
      Title = openEvents(i).Title 
      eventStart = openEvents(i).EventStart 
      eventEnd = openEvents(i).EventEnd 


      dr = dTable.NewRow() 

      dr.Item("Id") = id1 
      dr.Item("Title") = Title 
      dr.Item("EventStart") = eventStart 
      dr.Item("EventEnd") = eventEnd 


      dTable.Rows.Add(dr) 

      i = i + 1 

     Next 

     'do a select on the datatable and filter the results to give you the events for the day of the cell 
     ' as this method gets executed every time the cell is created, the calender control creates the cells 1 x1 

     dr1 = dTable.Select(String.Format("EventStart >= #{0}# AND EventStart < #{1}#", e.Day.Date.ToLongDateString(), e.Day.Date.AddDays(1).ToLongDateString())) 

     'local counter variables 
     Dim x As Integer = 0 
     Dim y As Integer = 0 
     Dim a As String 

     'loop to add all available event dates to an array 
     For Each dr In dr1 
      datearray(y) = dr.Item("EventStart") 
      idarray(y) = dr.Item("Id") 
      y = y + 1 
     Next 

     'delcare variables for flag true/false 

     'loop 
     For Each dr In dr1 

      'pull event date from previous array and assign it to local variable 
      a = datearray.GetValue(x) 

      'assign current event date to local variable WordToFind 
      WordToFind = dr.Item("EventStart") 


      ' test if the current event date = what ever is in the array of events and the flag is false 

      If WordToFind = a Then 

       'if the cell has a control on it (i.e the Image of the X) 
       If Not e.Cell.Controls.Count > 1 Then 


        e.Cell.CssClass = "event" 



       Else 


       End If 

      End If 

      x = x + 1 

     Next 

    End Sub 

回答

0

您正在使用的事件被稱爲DayRender時,每一天都是呈現它發生。我也不太清楚你的web服務在做什麼,但是如果你不想每次都調用它。將呼叫轉移到事件外並作爲本地字段存儲。您可以在Page_Init上執行此操作,以便在呈現控件之前調用它。