CollectionBase

martedì 09 settembre 2003 - 18.46

1234 Profilo | Newbie

Ciao,
sto modificando lo StarterKit TimeTricker del sito www.asp.net.

Sto cercando di sfruttare una variabile si sessione definita nel Global.asax in questo modo:
<object id="AppMonth" runat="server" scope="session" class="TimeTracker.BusinessLogicLayer.MonthCollection"/>
In questo modo dovrei in teoria poter vedere su tutta l'applicazione la variabile di sessione Session["AppMonth"] a condizione che ad ogni routine imposti quanto segue:
MonthCollection myMonthCollection = (MonthCollection) Session["AppMonth"];

La classe MonthCollection è una sottoclasse di CollectionBase.... ecco allora la mia domanda: c'è qu che ha mai lavorato con questa classe e che mi può dare qualche dritta. I miei obiettivi sono i seguenti:

- la mia classe MonthCollection dovrebbe gestire l'aggiunta, la rimozione, il salvataggio di oggetti di tipo Activity
- dovrebbe anche permettere di caricare in una MonthCollection tutte le attività del mese corrente
- inoltre ho bisogno che la classe MonthCollection rimanga in memoria fino a quando non effettuo un salvataggio globale (per esempio, dopo aver scelto un'altra pagina)

Grazie

Admin Profilo | Junior Member

Ciao,

collectionbase è la classe base per creare collezioni strongly typed (tipizzate), cioè che accettano nella collezioni solo oggetti che derivano da un determinato tipo .NET.

Implementa già alcuni metodi per rimuovere un elemento, o tutti gli elementi, etc.

Ecco la reference:
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemcollectionscollectionbasememberstopic.asp?frame=true

E' da implementare il metodo Add per permettere di aggiungere un elemento alla collezione.
Gli elementi vengono memorizzati internamente all'oggetto, tramite la proprietà InnerList, che è un ArrayList. Sarà lì dentro che dovrai aggiungere i tuoi oggetti.

Qui trovi un esempio completo (sia in C# sia in VB.NET) di come implementare la classe:
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemcollectionscollectionbaseclasstopic.asp?frame=true

Spero di esserti stato d'aiuto.

Ciao!
---
Stefano Giannone [MCP .NET]
stefano_NOSPAM@dotnethell.it (per scrivermi togliete "_NOSPAM" dall'indirizzo)

1234 Profilo | Newbie

I link che mi hai dato li avevo già stampati.... mi sa che il problema principale sta nella variabile di sessione, quella che dovrebbe essere attiva sempre e che eredita tutto da CollectionBase.

Io l'ho definita in questo modo nel Global.asax:
<object id="AppMonth" runat="server" scope="session" lass="TimeTracker.BusinessLogicLayer.MonthCollection"/>
ed ho impostato quanto segue sempre in Global.asax:
protected void Session_Start(Object sender, EventArgs e)
{
MonthCollection myMonthCollection = new MonthCollection();
Session["AppMonth"] = myMonthCollection;
}
In questo modo dovrei in teoria poter vedere su tutta l'applicazione la variabile di sessione Session["AppMonth"] a condizione che ad ogni routine imposti quanto segue:
MonthCollection myMonthCollection = (MonthCollection) Session["AppMonth"];

Domanda: ha senso quello che ho fatto? In questo modo è possibile sfruttare tutte le proprietà di CollectionBase in qualsiasi momento?

Aggiungo il codice di tAIMx_MonthCollection:

using System;
using System.Collections;

namespace mioProgetto
{
/// <summary>
/// Summary description for tAIMx_MonthCollection.
/// </summary>
public class MonthCollection : CollectionBase
{
public MonthCollection()
{
//
// TODO: Add constructor logic here
//
}


public Activity this[int indexAct]
{
get
{
return (Activity) List[indexAct];
}
set
{
List[indexAct] = value;
}
}


public void Add(Activity anActivity)
{
List.Add(anActivity);
}

public int IndexOf (Activity value)
{
return(List.IndexOf(value));
}

public void Insert (int index, Activity value)
{
List.Insert(index, value);
}

public void Remove(Activity value)
{
List.Remove(value);
}

public bool Contains(Activity value)
{
return(List.Contains(value));
}

}
}

Admin Profilo | Junior Member

mah, io toglierei questo, che mi sembra inutile:

<object id="AppMonth" runat="server" scope="session" lass="TimeTracker.BusinessLogicLayer.MonthCollection"/>

e lascierei soltanto questo:

protected void Session_Start(Object sender, EventArgs e)
{
MonthCollection myMonthCollection = new MonthCollection();
Session["AppMonth"] = myMonthCollection;
}

In questo modo potrai recuperare in ogni momento la tua collection con:

MonthCollection myMonthCollection = (MonthCollection)Session["AppMonth"];

fare le tue operazioni di Add, Remove, recupero degli oggetti, etc.

Ricordati però, ogni volta che modifichi la collection, di riposizionare il tutto in Session, facendo di nuovo:

Session["AppMonth"] = myMonthCollection;

Spero di esser stato chiaro.

Ciao!
---
Stefano Giannone [MCP .NET]
stefano_NOSPAM@dotnethell.it (per scrivermi togliete "_NOSPAM" dall'indirizzo)

1234 Profilo | Newbie

Ci ho rinunciato.... non lavoro più con le CollectionBase... ma torno ad un suo sotto oggetto... gli ArrayList: anche questo fanno parte della libreria Collection e lavoro molto meglio con queste.... almeno credo.

Grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5