10 messaggi dal 10 marzo 2006
Ciao a tutti,
ho un dubbio atroce e tantissimo bisogno di aiuto.. mi trova in estrema difficoltà.
Ho una aspx .net 2.0 con dentro un pannello contenente dei controlli di svariato tipo.
Il mio db dovrà essere strutturato in modo tale da avere una tabella con i campi che devo mostrare a video tramite controlli in una maschera che devo realizzare.
In particolare avrò 4 tabelle: Tazienda,Tdativersione,Tversione e Tcampi.
Tazienda è un anagrafica dell'azienda e quindi tra i campi ha:id_azienda,codice_fiscale,matricola e sede.
Tdativersione associa ad una particolare versione,un particolare campo con un particolare valore.Quindi i campi di questa tabella saranno id_versione,id_campo,valore_campo.
Tversione è lo storico delle versioni.I relativi campi saranno: id_versione,anno,mese,id_azienda,data_apertura,data_chiusura e stato.
Tcampi è proprio la tabella con i campi che devo mostrare.I campi saranno infatti: idcampo,descrizione,id_bloccofunzionale,tipo,decodifica e dimensione massima.
Ora mi è stato chiesto di realizzare delle classi tali che io abbia una classe "Pannello" che restituisce un hashtable avente come chiave la matricola e come valore una classe "DettaglioPannello".La stessa dovrà restituire un hastable avente come chiave il periodo (anno + mese) e come valore la classe "DettaglioAzienda" che infine restituisce un ultimo hashtable avente come chiave id_campo e come valore una classe DatoCampi.
Praticamente è una matrioska di hashtable.Non chiedetemi perchè vogliono sia fatto così,so solo che è così che devo fare e non ho idea di come realizzare queste classi.Cioè non so se creare più cs ogniuno con una delle suddette classi che restituiscono un hashtable o mettere tutto in un solo cs e non saprei come.Non so nemmeno se sia il caso di utilizzare le List<T>

Vi ringrazio infinitamente anticipatamente per l'aiuto.
10 messaggi dal 10 marzo 2006
Ciao,
in un altro forum mi hanno consigliato di utlizzare gli oggetti dictionary.
Quindi in sostanza dovrei avere una sorta di matrioska di dictionary,dove la bambolina più piccola è DatoDb e quella più grande,Pannello, che le contiene tutte. Questo a parole è molto bello,il problema è passare ai fatti...
Allora ho cominciato a fare 4 file cs che ho messo sotto un progetto classi che ho chiamato BLL (Business Logic Layer) e sostanzialmente ho riportato lo stesso concetto per 4 volte.Per esempio,riporto il codice da me scritto per la classe pannello:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Data.Common;
using System.Data.SqlClient;
using DAL;



namespace BLL
{
    public class Pannello2
    {
         //Ipotizzando codicefiscale una stringa
       Dictionary<string, DettaglioPannello2> _elencoDettaglioPannello2 = new Dictionary<string, DettaglioPannello2>();
       protected DatabaseUtility objDatabaseUtility = new DatabaseUtility();
       string mCF ;
       int mnTA = new int();

        public string codiceFiscale
            {
                get { return mCF; }
                set { mCF = value; }
            }

         public int numTotAziende
            {
                get { return mnTA; }
                set { mnTA = value; }
            }

          public Dictionary<string, DettaglioPannello2> elencoDettaglioPannello2 
          { 
               get { return _elencoDettaglioPannello2; } 

           }


          public static DataTable getelencoDettaglioPannello(string codicefiscale)
          {

              // get a configured DbCommand object

              GenericDataAccess gda = new GenericDataAccess();

              DbCommand comm = gda.CreateCommand();

              comm.CommandType = CommandType.Text;



              // set the stored procedure name

              comm.CommandText = "SELECT * FROM Tcampi";



              // create a new parameter

              DbParameter param = comm.CreateParameter();

              param.ParameterName = "@codicefiscale";

              param.Value = codicefiscale;

              param.DbType = DbType.String;

              comm.Parameters.Add(param);

              // return the result table

              DataTable table = gda.ExecuteSelectCommand(comm);

              return table;

          }


          public Dictionary<string, DettaglioPannello2> GetDictionaryPannello2(String codicefiscale)
          {
              SqlConnection cnn = objDatabaseUtility.OpenConnection();
              try
              {
                  Dictionary<string, DettaglioPannello2> resultsList = new Dictionary<string, DettaglioPannello2>();
                  SqlParameter[] paramsElemento = new SqlParameter[1];
                  paramsElemento[0] = new SqlParameter("@codicefiscale", codicefiscale);
                  string sql_statement = "SELECT * FROM Tcampi";
                  Dictionary<string, object> resultsListobj = objDatabaseUtility.SelectCommandDictonary(cnn, sql_statement, CommandType.Text, paramsElemento);

                  return resultsList;
              }
              catch (Exception e) { throw e; }
              finally { objDatabaseUtility.CloseConnection(cnn); }
          }





    }
}



Come potete notare tra le proprietà della classe pannello c'è la seguente,che dovrebbe essere quella che espone il dizionario dei dettaglipannello2

public Dictionary<string, DettaglioPannello2> elencoDettaglioPannello2 
          { 
               get { return _elencoDettaglioPannello2; } 

           }



Potrete notare dallo

using DAL;



e dal metodo

GetDictionaryPannello2


che mi sono creato un altro progetto di classi con le quali sto cercando di realizzare il Data Access Layer.Tale metodo nella mia mente dovrebbe riempire il dizionario esposto dal pannello... solo che sono un attimo confuso sul chi dovrà restituirmi il dato finale e come fare in modo che la classe atta al popolamento dei dizionari mi possa popolare ogni volta un dictionary del tipo da me dichiarato e cioè per esempio nel caso di pannello2 a chiave stringa corrisponde un oggetto della classe dettagliopannello2.
Spero di essere stato chiaro e mi auguro che qualcuno mi possa dare una mano,perchè non ho molto tempo a disposizione e ho su certi aspetti le idee parecchie confuse.

Grazie infinite anticipatamente per l'aiuto.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.