ITfjernundervisning

ASP.NET / Dataset og datagrid objektet / Cache

Cache

Vores applikation trækker temmelig tungt på XML dokumentet og for at mindske det træk vælger man ofte at lægge datasættet på en cachevariabel - det kan man gøre i GetDataset() funktionen:

Objekt kodning

Cache variablen kan ikke bruges inde i en klasse, så vi skal trimme vores codebehind fil:

Projekter _Projekter;
private void Page_Load(object sender, System.EventArgs e)
{
 if (Cache["Projekter"] != null)
  _Projekter = (Projekter)Cache["Projekter"];
 else
  {
   _Projekter = new Projekter();
   Cache["Projekter"] = _Projekter;
  } 
 if (!IsPostBack)
 {
  DoDataBind();
 }
}

private void dgridProjekter_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
 DataRow Projekt = _Projekter.Projekt(Convert.ToInt16(dgridProjekter.DataKeys[e.Item.ItemIndex]));
 Projekt["Navn"] = ((TextBox)e.Item.Cells[2].Controls[0]).Text;
 Projekt["Kunde"] = ((TextBox)e.Item.Cells[3].Controls[0]).Text;
 _Projekter.Opdater();
 Cache["Projekter"] = _Projekter;
 dgridProjekter.EditItemIndex = -1;
 DoDataBind();
}

private void dgridProjekter_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
 _Projekter.Slet(Convert.ToInt16(dgridProjekter.DataKeys[e.Item.ItemIndex]));
 Cache["Projekter"] = _Projekter;
 DoDataBind();
}

private void butNytProjekt_Click(object sender, System.EventArgs e)
{
 _Projekter.Nyt();
 Cache["Projekter"] = _Projekter;
 sortfield = null;
 sortorder = null;
 // nulstil sortering
 int recordCount = _Projekter.AntalProjekter();
 if (recordCount > 1 && dgridProjekter.AllowPaging) 
 { 
  recordCount -= 1; 
  dgridProjekter.CurrentPageIndex = (int)(recordCount / dgridProjekter.PageSize); 
  dgridProjekter.EditItemIndex = recordCount % dgridProjekter.PageSize; 
 } 
 else 
 { 
  dgridProjekter.EditItemIndex = recordCount -1; 
 }
 DoDataBind();
}
}

 

 

Klassisk kodning

VB.NET

    Private Function GetDataset() As DataSet
        Dim dsetAndebyCache As DataSet = Cache("AndebyData")
        If (Not dsetAndebyCache Is Nothing) Then
            Return dsetAndebyCache
        End If
        Dim dsetAndeby As New DataSet
        dsetAndeby.ReadXml(Server.MapPath("Andeby.xml"))
Cache("AndebyData") = dsetAndeby
        Return dsetAndeby
    End Function

C#

  private DataSet GetDataset()
  {
   DataSet dsetAndebyCache = (DataSet)Cache["AndebyData"];
   if (dsetAndebyCache != null)
   {
    return dsetAndebyCache;
   }
   DataSet dsetAndeby = new DataSet();
   dsetAndeby.ReadXml(Server.MapPath("Andeby.xml"));
Cache["AndebyData"] = dsetAndeby;
   return dsetAndeby;
  }
Husk også at opdatere dine cache data når du ændrer dit dataset.
Når du har betalt for kurset får du adgang til øvelser til hver lektion.
Og når du har fået godkendt din besvarelse får du desuden adgang til mine løsningsforslag med ekstra tips og trix.