Newsgroup: it.comp.lang.visual-basic
Titolo: [Net ] Dataset creato al volo..+ ASPX ...aiuto!...un po lungo!...ANZI.... LUNGO!

 Io tutte le volte che ci provo ad approcciarmi a stocaz di NET son sempre
invogliato dalle potenzialitŕ che intravedo e contemporaneamente frustrato
dall'immane casino che si genera nella mia mente!
Allora: ho trovato un bello script ASPX +vbNet per farsi le gallerie di
foto....
Spippola qua spippola la mi sembra di averci capito qualcosa...lo script
genera una sola galleria...ed io lo trasformo per piů gallerie!
Allora mi decido a fare questa sezione di un sito web (anche come mio
tutorial) con il "net"
bene una parte prevede che io abbia le mie foto in Public/galleria (aruba
si!)
Notevolmente caricato mi son fatto una classe PopolaDataset che prende i
file della dir e li mette in un dataset al volo!
Leggo un po di documentazione e questa parte mi sembra abbastanza piana!
Ed infatti la mia classe prende i file e li mette "al volo" in un dataset
L'idea poi č di presentare i dati in una griglia con un check accanto per
far scegliere le foto che dalla dir comune vanno nelle varie gallerie che
l'utonto sceglie di fare!
la classe č questa....abbiate pietŕ se troverete mille ottimizzazioni...ma č
la mia prima classe sotto NET!!!
Public Class PopolaDataSet
    Private mContatore As Integer
    Public Function PopolaDataset(ByVal PathFoto As String) As DataSet
        Dim Dset1 As New DataSet()
        'Aggiunta:
        'caratteristiche(DataSet)
        Dset1.DataSetName = "FotoArchiviate"
        'costruisco la tabella
        Dset1.Tables.Add("FotoTrovate")
        ' costruisco le colonne ( i campi)
        Dset1.Tables("FotoTrovate").Columns.Add("Nome foto")
        Dset1.Tables("FotoTrovate").Columns.Add("Altezza")
        Dset1.Tables("FotoTrovate").Columns.Add("Larghezza")
        Dset1.Tables("FotoTrovate").Columns.Add("Dimensione")
        'per usarla e riempirla devo creare dei dataRow
        Dim MioRecord As DataRow
        Dim fileEntries As String() = System.IO.Directory.GetFiles(PathFoto)
        ' Processa tutti i file contenuti in quella directory
        Dim mioFile As System.IO.FileInfo
        Dim miaDir As New System.IO.DirectoryInfo(PathFoto)
        Dim Contatore As Integer = 0
        'si cicla per trovare tutti i files
        For Each mioFile In miaDir.GetFiles
            'aggiungo una nuova riga
            MioRecord = Dset1.Tables("FotoTrovate").NewRow
            MioRecord("Nome Foto") = mioFile.FullName
            MioRecord("Dimensione") = mioFile.Length
            Dset1.Tables("FotoTrovate").Rows.Add(MioRecord)
            'fine aggiunta riga
            Contatore += 1
        Next
        mContatore = Contatore
        Return Dset1
    End Function
    Public ReadOnly Property NumeroFiles() As Integer
        Get
            Return mContatore
        End Get
    End Property
End Class
Bene ...direte...che cavolo vuoi da noi?
come la uso porca pupattola!
La frustrazione č che non funziona e non capisco come caz girano gli eventi
in una webform!
mi son fatto una web form
nelle dichiarazioni ho messo
    Protected DSfoto As New PopolaDataSet()
    Protected MioDs As New DataSet()
    Private Accessi As Integer = 1
...poi...nella load della webform
        Dim locPath As String
        locPath = Server.MapPath("/webapplication2/public/galleria")
        lblInfo.Text = locPath
        If Not Page.IsPostBack Then
            Accessi += 1
            MioDs = DSfoto.PopolaDataset(locPath)
            NumRow = MioDs.Tables("FotoTrovate").Rows.Count
            CurRec = 1
            Me.lblDbinfo.Text = "Accessi " & CStr(Accessi) & " RECORD
CORRENTE: " & CStr(CurRec)
        End If
le varie label mi confermano che funzionano e che trova quello che deve
trovare (nello specifico 70 foto)
il fatto č che se attacco una datagrid o 2 pulsanti...avanti indietro
con dentro sto codice sega
ad esempio indietro
        CurRec = CurRec - 1
        'If CurRec <= 0 Then CurRec = 1
        Me.lblDbinfo.Text = "Accessi: " & CStr(Accessi) & " RECORD CORRENTE:
" & CStr(CurRec)
mi rendo conto che NON mantiene (ma invece una bella cosa di net non era
quella di mantenere lo stato??)lo stato tra una pagina e l'altra e quindi
reinizializza il dataset e non fa paginazione ne movimento avanti o
indietro!
sigh!
...tutte le volte che ci provo mazzulate!!!
trovo info su datagrid e robaccie varie ma che non capisco come facciano a
funzionare....e poi son tutte su tabelle di db...non su Dataset fatti al
volo come il mio!
mi aiutate per favore? Paradossalmente non ho avuto difficoltŕ a fare una
classe e mi areno qui su una webform!!!
SIGH e STRA-SOB!
(scusate la lunghezza ma mi dovevo far capire!)
-- 
Il Wodkino Nazionale č a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
New Entry nel bestiario!
:-)

Wodka40° wrote:
c'ho pensato ora....
se la soluzione č memorizzare curRec in una var Session o in un cookie
(suppergiů uguale)....butto tutto dalla finestra!
:-)


Wodka40° wrote:
CUTTONE> >
Spippolando su aspitalia e Leggendo un articolo di Daniele (Bochicchio)
son arrivato ad un codice che funziona....
mah!....c'ho molto da capire !
il codice di sopra mi sembrava logico....questo mi sembra illogico....ma
funziona! E allora la mia logica ancora non coincide con la sua! evabbč!
....
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
        BindData()
    End Sub
    Sub cambiapagina(ByVal sender As Object, ByVal e As
DataGridPageChangedEventArgs)
        GrigliaFoto.CurrentPageIndex = e.NewPageIndex
        lblRisultati.Text = "Pagina " & (e.NewPageIndex + 1)
        BindData()
    End Sub
    Sub BindData()
        'mio path
        Dim mioPath As String =
Server.MapPath("/webapplication2/public/galleria")
        'dichiara la classe che cra il dataset
        Dim Tfile As New PopolaDataSet()
        'Dichiara dataset da agganciare alla griglia
        Dim FotoDataset As DataSet
        'Popola il dataset "locale"
        FotoDataset = Tfile.PopolaDataset(mioPath)
        ' paginazione con numero di pagina
        GrigliaFoto.PagerStyle.Mode = PagerMode.NumericPages
        ' numero di pagine da mostrare, seguono poi i ...
        GrigliaFoto.PagerStyle.PageButtonCount = 5
        'bind alla griglia
        GrigliaFoto.DataSource = FotoDataset
        GrigliaFoto.DataBind()
    End Sub
End Class
e...
<ASP:Datagrid id="GrigliaFoto" runat="server" AllowPaging="True"
onPageIndexChanged="cambiapagina" />
....che dire...un sacco da studiare....un sacco di errori da correggere!
Grazie di aver preso il mio "sfogo"!
--


 CUTTONE> >
Taglio
Apporterei quanto segue:
1- Nella classe PopolaDataSet è opportuno verificare se esistono file:
  If miaDir.GetFiles.Length = 0 Then
            Return Nothing
        End If
2- WebForm - Due variabili di modulo
Private mioDs As New DataSet
Private Accessi As Int32 = 1
3- Nell'evento Load della WebForm
  If Not Me.ViewState("Accessi") Is Nothing Then
            Accessi = Me.ViewState("Accessi") + 1
        End If
        'Memorizza nella proprietà protetta ViewState il valore
        'Proprietà che viene memorizzata nel campo nascosto _VIEWSTATE
        Me.ViewState("Accessi") = Accessi
        Me.lblAccessi.Text = "Numero accessi:  " & Accessi
        If Not Me.IsPostBack Then
            BindData()
        End If
'Memorizzo il DataSet per evitare la costruzione ad ogni PostBack
        If Not Session("DS") Is Nothing Then
            mioDs = DirectCast(Session("DS"), DataSet)
        End If
4- Metodo BindData
Private Sub BindData()
        Dim locPath As String = Server.MapPath("\images").ToString
              Me.lblInfo.Text = locPath
        Dim dsFoto As New PopolaDataSet
        mioDs = dsFoto.PopolaDataSet(locPath)
        ' paginazione con numero di pagina
        GrigliaFoto.PagerStyle.Mode = PagerMode.NumericPages
        ' numero di pagine da mostrare, seguono poi i ...
        GrigliaFoto.PagerStyle.PageButtonCount = 5
        'bind alla griglia
        GrigliaFoto.DataSource = mioDs
        GrigliaFoto.DataBind()
        Session("DS") = mioDs
    End Sub
Ave
giuseppeD