DGV con MS Access

di il
6 risposte

DGV con MS Access

Buongiorno a tutti e buona domenica. Sto utilizzando Visual Studio 2022 per un Windows Form .net collegato con OLEDB ad un database Access. Nel Form è presente una DataGridView (“DGV”) che viene popolata al load form dalla tabella booking. La DGV è strutturata con un MonthCalendar.Selected  che genera le righe con i giorni del mese. Per le colonne invece, un ciclo For i per il numero di camere dalla 1 alla 10. Lo scopo di tale tabella è la gestione del booking di camere che vengono visualizzate nella DGV col colore rosso nei giorni prenotati, permettendo di distinguere le camere/giorni occupate, da quelle libere nell’arco del mese. I dati sono importati con un datareader per i campi Room utilizzando Dr.GetInt32(n) (campo numerico room) e DataInizio, DataFine dr.GetDatetime(n).Per concludere la descrizione, nel Form è infine presente un cmd.Inserisci e due datapicker (“da” “a”)  per l’inserimento e aggiornamento  di una nuova prenotazione nella DGV. Il tutto funziona. Il mio limite si presenta come segue:

Non riesco in alcun modo ad intercettare i campi già inseriti al fine di, se erroneamente in sede di inserimento, inserisco la data di una nuova prenotazione nel renge già presente in grid, creo una sovrapposizione di due prenotazioni nella stessa camera in un  periodo già occupato. Il problema si complica poi per la DataFine perché il giorno di partenza può essere anche il giorno disponibile per un nuovo arrivo. Ho provato con If al click del cmd.Inserisci con il seguente codice :

If DataInizio => a DataInizio and DataInizio<DataFine Then
MessageBox.Show(“Attenzione! Camera già occupata.Verifica le date”)
End if

Purtroppo il MessageBox si presenta senza logica sempre, senza soddisfare la condizione necessaria.  Ho pensato persino di utilizzare i colori presenti nella DGV (rosso per le camere occupate e inserendo il giallo per la data di partenza) al fine di utilizzarli come escamotage con la funzione If e raggiungere lo scopo… Se colore rosso: camera e data occupata. Altrimenti giallo e bianco camera e data disponibile…in tal caso però non potrei inserire il codice nel cmd.Inserisci perché la connessione al database avviene con stringa Insert e non in Select come per il datareader…
Spero possiate “illuminare la strada giusta da prendere ” e superare questo mio limite.

Grazie in anticipo 

Buona giornata 

6 Risposte

  • Re: DGV con MS Access

    Salve,

    probabilmente NON hai alcun "riferimento" nella griglia per l'indicazione dello stato di occupazione... potresti basarti sul colore della cella o sul contenuto diverso da string.empty, ma tant'e'...
    dici che usi un Reader, che quindi chiudi subito dopo il popolamento manuale della griglia, ma cosi' non hai "in mano" niente che tu possa utilizzare per riscontri etc...
    almeno una POCO list di oggetti "Prenotazione" dovresti mantenerla per "futura gestione"... questo sull'ambito "tennico" immediato...

    Parli di "Camere" e quindi presumo ti riferisca ad un gestionale legato all'hotelleria, e mi permetto, anche se non richiesto, alcune indicazioni.
    Per tradizione derivante dalla carta, nell'hotelleria il cosidetto Piano Camere, Plainner o come di si voglia, ha l'orientamento degli assi completamente invertito, sull'asse delle X il tempo e sull'asse delle Y le risorse (le camere)...
    Le risorse (camere) non sono normalmente identificate da un numero (nel dominio numerico), ma da una "chiave alfabetica" (che magari e' sempre un numero ma nel dominio dei caratteri.. un nvarchar)... quindi potresti avere Camera {101}, ma anche camera {Ovest101}... l'overbooking e' senza dubbio una realta' diffusa nell'hotelleria, legata a code o liste di attesa, etc, quindi non la escludere a prescindere, perche' se il tuo vuole essere un progetto commerciale, prima o poi te lo chiederanno...

    Sempre per tradizione, le prenotazioni non occupano l'intero giorno di arrivo e l'intero giorno di partenza, ad indicare che nel giorno X, la risorsa e' occupata dall'ospite in partenza e dal nuovo ospite in arrivo… in questo contesto non ho mai visto una percentuale di riempimento della “cella” su base percentuale in base all'ora di check out (o late check out) e/o all'ora di check in, quindi, 50% ognuna… questa e' per te una “buona notizia” :D

    le indicazioni sopra riportate, fanno si che solitamente NON si utilizzi un controllo “griglia” per la visualizzazione del piano camere… in tutta la mia esperienza ne ho visto solo 1 di piani camere fatto con griglia, e non mi e' mai piaciuto quel gestionale, ma non solo per quel motivo.

    quindi, tendenzialmente, un piano camere (anche sulla carta) ha questa visualizzazione,

    dove, appunto, la risorsa (camera) “103” ha le prenotazioni “Preno0” con in/out = 01/03 - 05/03, “Preno1” con arrivo il 05/03 e partenza il 07/03, mentre la prenotazione “Preno2” arriverebbe il 06/03 con partenza il 10/03… con overbooking di 1 giorno il 06/03

    Per quanto solitamente ho visto, viene utilizzato come contenitore una picturebox dove si disegna “TUTTO” a mano, basato su liste POCO di oggetti “Prenotazione” che poi nel “mouseDown” sulla picturebox puo' allacciare dalle coordinate x,y della stessa…

    salutoni romagnoli
    – 
    Andrea

  • Re: DGV con MS Access

    Questo 

    If DataInizio => a DataInizio and DataInizio<DataFine Then
    MessageBox.Show(“Attenzione! Camera già occupata.Verifica le date”)
    End if

     è logico che sia sempre verificato. DataInizio è sicuramente uguale a DataInizio.

    Un' informazione fondamentale che avresti dovuto dare è come vengono memorizzate le prenotazioni. Supponendo una struttura minimale della tabella, i campi dovrebbero essere Id, NumeroCamera, DataInizio, DataFine. Quando vengono impostate le due date con i due DataPicker dovresti controllare:

    1. che DataInizio non sia posteriore a DataFine
    2. che non esista una prenotazione in cui l'intervallo DataInizio-DataFine comprenda la DataInizio della nuova prenotazione
    3. che non esista una prenotazione in cui l'intervallo DataInizio-DataFine comprenda la Datafine della nuova prenotazione.

    Questo per cominciare, in quanto non prevede la fine di una prenotazione e l'inizio di un'altra nello stesso giorno. Ma questo lo potrai affrontare come secondo step, anche perché devi trovare un modo per rappresentare graficamente questa situazione della cella della griglia.

    Ci sarà poi una quantità di altre cose da gestire: scavallamenti di mese, disdette, tipologia delle camere, ecc. ecc.

    Valuta attentamente il suggerimento di asql riguardo all'orientamento degli assi.

  • Re: DGV con MS Access

    Ringrazio per la sua, tanto esaustiva quanto, tecnica risposta. Conosco molto bene i gestionali alberghieri dove ho operato da 20 anni a questa parte. Da i più semplici e banali definiti con malignità dagli addetti ai lavori “fogli Excel”… arrivando poi al top della gamma utilizzati da realtà lusso ed extra lusso. Cercavo di mio, con un background professionale, di creare un piccolo gestionale da autodidatta senza ambizioni speculative. Condivido a pieno la parte del late checkout e check-in di quello che in gergo si definisce back to back. Non solo, lo stesso problema si presenta negli hotel che vendono il dayuse, quindi arrivo e partenza nel giorno medesimo. Grazie Andrea per il suo tempo e per la sua competenza dedicata al mio quesito. Cordialmente 

    Mario 

  • Re: DGV con MS Access

    Grazie anche a lei Grumpy. Non mi sono soffermato su come abbia strutturato il DB per non scrivere un poema. Ovviamente la tabella booking è strutturata con un IDPrenotazione con chiave primaria non numero autogenerante ma univoco inserito dal form in VB. I campi Nome e cognome ospite che vengono visualizzati all’interno delle celle rosse nel planing (DGV) e campi Camera (numerico) e tariffa. Chiedo venia se per voi ho dato per scontato tutto sottovalutando le basi. Grazie infinite per i vostri preziosi suggerimenti.

    Mario 

  • Re: DGV con MS Access

    Devi usare datetiime> (aaaa/mm/gg hh:zz)

    Dovresti creare i giorni di prenotazione x camera.

    A volte capita di cambiare camera.

    Esattamente la richiesta 

    03/03/2024 - Marval1971 ha scritto:


    Non riesco in alcun modo ad intercettare i campi già inseriti al

    Se li sviluppi per stanza come ti ha illustrato asql la prenotazione la fai a suon di click dove hai spazi in cui clikkare… 

    Al click intercetti i giorni, la camera, il cliente. 

  • Re: DGV con MS Access

    Va bene, proverò questa strada. Grazie infinte per il consiglio 

Devi accedere o registrarti per scrivere nel forum
6 risposte