944 messaggi dal 11 febbraio 2013
ciao ragazzi
ho un gridview in un progetto webform dove vorrei disabilitare per 10 minuti il bottone di selezione
della griglia quando si raggiungono 20 ordini.

in pratica nella griglia l'utente visualizza tutti gli ordini da spedire li stampa e li mette "chiusi"

vorrei che ogni 20 ordini chiusi il bottone select command venga disabilitato per 10 minuti

<asp:GridView ID="GV_Picking_Ordini" runat="server" 
          DataKeyNames="OS_Anno,OS_Codcen,OS_Coddep,OS_Tipord,OS_Numord,OS_Distinzione"  
          AutoGenerateColumns="False"
          SelectMethod="CodaPickingGetData" ItemType="CODA_PICKING" 
          DeleteMethod="Delete_CODA_PICKING"
          Allowpaging="True"  AllowSorting="True" 
          ...>
...
<asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:LinkButton ID="lnkBtnSelect" runat="server" CausesValidation="False" 
                            OnCommand="lnkBtnSelect_Command"  CommandArgument="<%# Container.DataItemIndex %>"
                            CommandName="Select"  Text="Seleziona">
                        </asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>


Come posso fare ?
grazie come sempre
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
quando l'utente chiude un ordine, potresti verificare se è già arrivato a chiudere 20 ordini. Se sì, scrivi una data/ora di 10 minuti nel futuro sul suo record nel database.

Successivamente, quando l'utente ricarica la pagina, vai a verificare se la data/ora corrente è minore o maggiore di quella che avevi scritto in precedenza. Se è minore, disabilita il comando Select.

Hai due opzioni per ottenere un riferimento ai LinkButton Select.
  • Gestire l'evento RowDataBound della GridView come vedi nell'esempio contenuto nella documentazione;
  • Gestire l'evento Load del LinkButton. Il gestore dell'evento avrà un parametro object sender che potrai castare a LinkButton.


In un modo o nell'altro, quando hai ottenuto un riferimento al LinkButton, imposta la sua proprietà Enabled a false per disabilitarlo.

ciao,
Moreno

Enjoy learning and just keep making
944 messaggi dal 11 febbraio 2013
ok grazie farò senz'altro cosi
mi ero complicato le cose da solo...

Solo una domanda: mi conviene creare una prorietà che ritorni il numero degli ordini nella classe?

 public int NumeroOrdini{
  get{
      using(Entity db = new ...)){
      int nr = db.tab.where(i=>i.stato="chiuso").count();
return nr;
}
}
}


poi metto questa prorietà in un campo del gridview...ma poi come la riazzero?
magari mi perdo in un bicchiere di h2O
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Solo una domanda: mi conviene creare una prorietà che ritorni il numero degli ordini nella classe?

Sì, il codice che hai postato può andar bene. Come ottimizzazione potresti riutilizzare una stessa istanza del DbContext per tutte le operazioni di accesso al database nella pagina corrente.


ma poi come la riazzero?

Non so come funziona il tuo sistema ma non credo che tu debba "azzerare" nulla. Del resto il conteggio è calcolato in base al numero di ordini chiusi. Ad esempio, nel momento in cui un ordine passa da "chiuso" a "spedito", ecco che il conteggio degli ordini chiusi decrescerà.

E comunque tu hai detto che vuoi bloccare il tasto per 10 minuti, quindi il conteggio degli ordini può anche rimanere a 20. Trascorsi i 10 minuti, il tasto di selezione tornerà abilitato perché ormai è trascorsa la data/ora che avevi impostato prima.

ciao,
Moreno

Enjoy learning and just keep making
944 messaggi dal 11 febbraio 2013
No purtroppo la griglia mostra gli ordini scelti (secondo un algoritmo di ottimizzazione delle giacenze)
e il magazziniere li prepara (fa il pacco) e quando preme il bottone CHIUDI li mette in uno stato di pre-spedizione percui non si azzerano...

Dovrei considerare i multipli di 20... ma come?

per i campi data ho già fatto
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Dovrei considerare i multipli di 20... ma come?

Beh, per verificare se un numero è multiplo di 20 puoi usare l'operatore modulo.


bool disabilitaSelect = NumeroOrdiniChiusi % 20 == 0;


ciao,
Moreno
Modificato da BrightSoul il 04 dicembre 2017 21.22 -

Enjoy learning and just keep making
944 messaggi dal 11 febbraio 2013


non ci avevo nemmeno pensato

era troppo facile :)

grazie
ciao

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.