Domanda Visual Studio Avviso scadenze

dautattmaui

Utente abituale
25 Gennaio 2016
205
16
Bari
2013
2
Buongiorno a tutti, sono da giorni bloccato su un problema di un programma che mi deve calcolare con un messaggio l'avvicinarsi di una o più scadenze nell'arco di gg. 5.
Il programma funziona facendo la scansione di tutti i prodotti inseriti nella tabella e non di quelli che sono stati inseriti nei limiti di gg. 5.

Riporto il codice:
Visual Basic:
for (int i = 0; i < DataGridView.RowCount; i++)
{
   Voce = (string)DataGridView.Rows[i].Cells[1].Value;
   Scadenza = (string)DataGridView.Rows[i].Cells[2].Value;

if (DataGridView.Rows[i].Cells[2].Value.ToString().Length <= 5)
{
    MessageBox.Show(("Attento! Scadenza a breve su " + Voce) + (" Giorni
" + Scadenza), "   ", MessageBoxButtons.OK);
}
Vi ringrazio anticipatamente dell'aiuto,
Mauro
 

dautattmaui

Utente abituale
25 Gennaio 2016
205
16
Bari
2013
2
Nella colonna 2 sono riportate le varie scadenze che sono calcolate in giorni all'approvvigionamento dei prodotti e alla colonna 2 appaiono 3-6-5-9-10 (giorni).
Per il calcolo vengono usate due DataPicher Inizio e Termina.
Se la scadenza entra nei limiti in questo caso 3 - 5 dovrebbe intervenire un Messaggio di avviso.
Grazie dell'interessamento.
 

Bax

Utente abituale
2 Maggio 2021
243
30
Udine
www.simracingleague.it
Pro 2016
25
L'istruzione alla riga 6 è per me un mistero:
Visual Basic:
if (DataGridView.Rows[i].Cells[2].Value.ToString().Length <= 5)
Prendi il valore della colonna 2, lo strasformi in una stringa, ne calcoli la lunghezza (!) e lo confronti con 5.
Cioè se il valore della cella in formato stringa è "5", la sua lunghezza è 1 e sarà sempre <5
A occhio questo codice ti da un allarme scadenza per tutte le righe.

Se il valore in colonna 2, come pare, è già numerico, allora dovrebbe bastare
Visual Basic:
if (DataGridView.Rows[i].Cells[2].Value <= 5)
o qualcosa mi sfugge?
 

dautattmaui

Utente abituale
25 Gennaio 2016
205
16
Bari
2013
2
Buongiorno Bax, grazie per la disponibilità, purtroppo ancora non funziona modificando il codice come suggerito, in allegato invio il file zippato sperando che tu possa visionarlo.
E' uno file ridotto ed il valore nella colona 2 è numerico.
Grazie ancora dell'aiuto.
 

Allegati

Bax

Utente abituale
2 Maggio 2021
243
30
Udine
www.simracingleague.it
Pro 2016
25
Ambiente ostico a cui non sono per niente abituato :confusostelle:
Non sono riuscito a trovare alcuna funzione di conversione e non saprei nemmeno se ti mancano le librerie o cosa... non è il mio pane purtroppo (ma, vedo, nemmeno il tuo se ti fermi su un problema così "basilare" mi verrebbe da dire) .

In attesa di qualcuno che conosca l'ambiente/linguaggio si faccia avanti, e non essendo riuscito a convertire quelle stringhe in numeri... l'unica cosa che mi è venuta in mente è quella di impedire alla stringa di essere uguale a "1", a "2", a "3", a "4" e a "5".
Metodo da cavernicoli (che tra le altre cose ignora l'eventualità di numeri negativi)... ma questo so.

Visual Basic:
if (Scadenza!="1" && Scadenza!="2" && Scadenza != "3" && Scadenza != "4" && Scadenza != "5")
Mmmhhhh.... a ripensarci questo da la soluzione opposta a quella voluta, nel senso che ti da il messaggio se i giorni sono >5 Muoio_muoio. Va bun... ormai ho chiuso tutto e cancellato tutto, credo che da qui in poi, nel caso ti dovesse andare bene la soluzione proposta, te la sappia cavare da solo.
 
Ultima modifica:

giulianovac

Access/VBA Expert
Staff
9 Giugno 2018
5.153
245
Italy
2019
408
purtroppo ancora non funziona modificando il codice come suggerito
Non fai il DEBUG del codice?
Perché se non lo fai non vai da nessuna parte.

Non so come stai gestendo la cosa, ma a mio avviso non ha alcun senso confrontare quei due valori.
Una scadenza deve sempre fare riferimento ad una DATA, che nella tua griglia non esiste.
 

dracoscrigno

CioccaPiatti & VBA Expert
Expert
Staff
1 Maggio 2016
4.313
85
Ferrara
office pro 2010
78
Buongiorno a tutti, sono da giorni bloccato su un problema
Ed in tutto questo tempo non hai ancora avuto il capire di dedicarti ad altro visto che quest ambito non è proprio pane per i tuoi denti.

Nessuno ti impicca se metti a confronto le cose per quello che sono e nessuno ti accoltella la faccia a badilate di taglio se PRIMA, con un paio di variabili, estrai i dati che ti servono per il confronto.

Ti serve conoscere un VALORE numerico contemuto in una stringa?
Lo estrai con le funzioni che manipolano le stringhe e lo tratti da numero.
Te ne servono due perchè hai un minimo ed un massimo?. Bene... Avarai una variabile di nome:
Dim Pluto_ce_la_grandeGrande as CheNeSo_intQualcosa = estrai il numero da quella stringa in un qualche modo

Dim Pippo_ce_la_minuto as CheNeSo_intQualcosa = estrai il numero da quella stringa in un qualche modo


E DOPO, valuti i due valori che hai estratto da non voglio nemmeno sapere dove.

mi ero dimenticato di postare la correzione al volo:

Codice:
             for (int i = 0; i < DataGridView.RowCount; i++)
             {
                Voce = (string)DataGridView.Rows[i].Cells[1].Value;
                Scadenza = (string)DataGridView.Rows[i].Cells[2].Value;

                int cella_2 = int.Parse((string)DataGridView.Rows[i].Cells[2].Value);
                if (cella_2 <= 5)
                {
                    MessageBox.Show(("Attento! Scadenza a breve su " + Voce) + (" Giorni " + Scadenza), "   ", MessageBoxButtons.OK);
                }                        
             }
 
Ultima modifica:

dracoscrigno

CioccaPiatti & VBA Expert
Expert
Staff
1 Maggio 2016
4.313
85
Ferrara
office pro 2010
78
Nella colonna 2 sono riportate le varie scadenze che sono calcolate in giorni
se sono giorni, se sono numeri con i quali,poi, devi averci a che fare con calcoli, confronti e solo nostro Signore sa cosa potresti avere in mente... Perchè li hai immessi come se fossero stringhe? ...

Ora. Io e c# siamo amici come lo sono un cane ed un gatto ma con l' ide che ti bestemmia addosso ogni tre per due alcune correzioni avresti dovuto apportarle in automatico. Se non altro, per trovarti ad impiccare il pc alla finestra.

Codice:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Avviso_di_Scadenza
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DataGridView.Columns.Clear();
            DataGridView.ColumnCount = 3;
            DataGridView.Columns[0].Name = "ID";
            DataGridView.Columns[1].Name = "Voce";
            DataGridView.Columns[2].Name = "Giorni";

            DataGridView.Columns[0].ValueType = typeof(int);
            DataGridView.Columns[1].ValueType = typeof(string);
            DataGridView.Columns[2].ValueType = typeof(int);

            DataGridView.Columns[1].Width = 100;
            DataGridView.Columns[2].Width = 50;
            
            DataGridView.Columns[0].Visible = false;
            
            DataGridView.Rows.Add(1, "Campagna", 3);
            DataGridView.Rows.Add(2, "Cielo", 50);
            DataGridView.Rows.Add(3, "Lago", 6);
            DataGridView.Rows.Add(4, "Mare", 150);
            DataGridView.Rows.Add(5, "Montagna", 5);
            DataGridView.Rows.Add(6, "Terra", 20);
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
             int Scadenza = 0;
             string Voce = "";

            for (int i = 0; i < DataGridView.RowCount; i++) 
             {
                Voce = (string)DataGridView.Rows[i].Cells[1].Value;
                Scadenza = (int)DataGridView.Rows[i].Cells[2].Value;
                if (Scadenza <= 5)
                {
                    MessageBox.Show(("Attento! Scadenza a breve su " + Voce) + (" Giorni " + Scadenza), "   ", MessageBoxButtons.OK);
                }                        
             }
        }

        private void DataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
    }
}
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!