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.