Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151

    [VB.NET] Ereditare metodi di conversione (.ToString ecc..)

    Ciao a tutti, sto facendo una classe per la gestione di un oggetto DataTable, e tra le altre cose ho un metodo che, passato il nome del campo, mi restituire il valore, oppure passare il nuovo valore per quel campo..
    codice:
    Public Property Field(ByVal nomeField As String) As Object
        Get
            Return pDataTable.Rows(pForm.BindingContext(pDataTable).Position)(nomeField)
        End Get
        Set(ByVal Value As Object)
            pDataTable.Rows(pForm.BindingContext(pDataTable).Position)(nomeField) = Value
        End Set
    End Property
    Siccome il valore restituito potrebbe essere di qualsiasi tipo (string, integer, double ecc..) ho preferito creare un unico metodo facendomi restituire un oggetto generico, e poi all'occorrenza fare un casting
    codice:
    txtIndirizzo.Text = CType(Obj.Field("Indirizzo"), String)
    Ora mi chiedevo, è possibile ereditare i metodi di conversione che si trovano spesso negli oggetti del framework, tipo oggetto.ToString?
    In pratica volevo ottenere una cosa del genere:
    codice:
    Obj.Field("Indirizzo").ToString
    Obj.Field("Numero").ToInt32
    ecc...
    Oppure, secondo voi, è meglio definire più metodi, passandogli il nome del campo e il tipo?
    Grazie
    Jupy

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Più che altro, il funzionamento della tua classe sembra del tutto identico a quello già offerto dalle classi ADO.NET: perché reinventare la ruota?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Originariamente inviato da alka
    Più che altro, il funzionamento della tua classe sembra del tutto identico a quello già offerto dalle classi ADO.NET: perché reinventare la ruota?
    :master: davvero già c'è un metodo simile? per quanto ho cercato non sono riuscito a trovalo..mi dici quale oggetto usare? grazie
    Jupy

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Se non ricordo male, ogni DataTable ha una collezione di DataRows che sono tutte le righe di cui è composta, da cui - attraverso la collezione di DataColumns - è possibile, dato il nome, risalire al valore di una colonna che viene restituito come Object (in quanto può essere di vari tipi).

    Sembra in tutto e per tutto ciò che vuoi fare tu.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    bhe si, in pratica quello che mi dici tu è questo:
    DataTable.Rows(indiceRiga)(nomeCampo)
    che è molto simile, a quanto faccio io:
    pDataTable.Rows(pForm.BindingContext(pDataTable).P osition)(nomeField)pDataTable.Rows(pForm.BindingCo ntext(pDataTable).Position)(nomeField)pDataTable.R ows(pForm.BindingContext(pDataTable).Position)(nom eField)
    dove pDataTable è un DataTable e pForm è il form che ha chiamato questo metodo...
    è vero che sono simili, ma se io navigo, nel DataTable, con pulsanti "avanti" o "indietro", devo per forza agire (aumentando o diminuendo il valore) su questo: pForm.BindingContext(pDataTable).Position o no?
    Eventualmente, come faccio a trovare l'indice della riga, dove attualmente è il puntatore del record, senza usare il mio metodo?
    Jupy

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da Jupy64
    Eventualmente, come faccio a trovare l'indice della riga, dove attualmente è il puntatore del record, senza usare il mio metodo?
    Ti basta usare una variabile intera. Spostarsi avanti significa incrementarla di uno, decrementarla nel caso contrario.

    I valori possono andare da 0 (zero) a DataTable.Rows.Count - 1, oppure la imposti a -1 se la tabella è vuota.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Si, ho capito, ma a questo punto, visto che il procedimento per spostarsi nei record è questo:
    Avanti: Me.BindingContext(DataTable).Position +=1
    Indietro: Me.BindingContext(DataTable).Position -=1
    Ultimo: Me.BindingContext(DataTable).Position = (DataTable.Rows.Count - 1)
    Primo: Me.BindingContext(DataTable).Position =0
    Per ricavare l'indice della riga, basta fare cosi:
    Me.BindingContext(DataTable).Position
    a questo punto non serve usare una variabile intera..o no?
    è giusto il procedimento che adotto? Perchè non conosco altri metodi..
    Se è giusto, il mio metodo vuole solo abbreviare la scrittura di tutto il codice che ci vorrebbe per ricavare il valore del campo:
    DataTable.Rows(Me.BindingContext(DataTable).Positi on)(nomeField)
    è un'idea sbagliata?
    Jupy

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    In quale punto scrivi quel codice?

    Qual è lo scopo che vuoi ottenere in generale?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    In pratica mi sono fatto delle funzioni, per navigare..
    codice:
    Public Function MovePrevious() As Int32
        If Me.BindingContext(DataTable).Position > 0 Then
            Me.BindingContext(DataTable).Position -= 1
            Return Me.BindingContext(DataTable).Position
        Else
            'siamo all'ultimo record...
            Return -1
        End If
    End Function
    Public Function MoveNext() As Int32
    ....
    ...
    End Function
    che volevo riassumere in una classe...
    Questo per avere la possibilità di scorrere i record, usando dei pulsanti per andare avanti o indietro..
    Jupy

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Lo chiedevo per capire come mai usi BindingContext: non potresti usare direttamente l'oggetto DataTable applicando gli indici di riga e, successivamente, i nomi delle colonne?

    In sostanza, scrivi
    codice:
    MyDataTable.Rows(MyRowIndex)("NOMECOLONNA")
    dove MyDataTable è la tabella che usi e MyRowIndex è l'indice della riga.
    :master:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.