0
votes

Variable ++ ne augmentant pas la taille de la variable

Je suis occupé à écrire un programme qui a une étiquette qui dit "mois" sur la charge de formulaire et lorsque l'utilisateur sélectionne une ligne dans une grille de grille l'étiquette change de texte à "mars" puis il y a un bouton lorsque cliqué devrait augmenter une variable de 1 et changer le texte au mois suivant qui devrait être "avril".

Voici mon codage: p>

int selected, month;

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void dgvBudget_SelectedIndexChanged(object sender, EventArgs e)
    {
        lblMonth.Text = "March :";
        month = 0;

        selected = dgvBudget.SelectedIndex;
        txtGLType.Text = dgvBudget.Rows[selected].Cells[1].Text;
        txtYear.Text = dgvBudget.Rows[selected].Cells[2].Text;
    }

    protected void btnUpdate_Click(object sender, EventArgs e)
    {
        month++;

        switch (month)
        {
            case 1:
                lblMonth.Text = "April :";
                break;

            case 2:
                lblMonth.Text = "May :";
                break;

            case 3:
                lblMonth.Text = "June :";
                break;

            case 4:
                lblMonth.Text = "July :";
                break;

            case 5:
                lblMonth.Text = "Augustus :";
                break;

            case 6:
                lblMonth.Text = "September :";
                break;

            case 7:
                lblMonth.Text = "October :";
                break;

            case 8:
                lblMonth.Text = "November :";
                break;

            case 9:
                lblMonth.Text = "December :";
                break;

            case 10:
                lblMonth.Text = "January :";
                break;

            case 11:
                lblMonth.Text = "February :";
                break;

            default:
                break;
        }
    }


4 commentaires

La valeur du mois sera toujours revenue à zéro car cette ligne mois = 0; . Déplacez-le à la variable statique ou peut-être des sessions pour garder la valeur du mois.


Pour des noms de moments, vous pouvez utiliser int unem = 12; var dfi = nouveau DateTimeFormatinfo (); var mname = dfi.getabbréviatedname (mois);


@CUPPYZH Le mois ne sera revenu qu'à 0 s'il choisit une nouvelle ligne.


Avez-vous eu une chose à propos d'utiliser Types d'énumération ?


3 Réponses :


2
votes

Modifier l'initialisation de la variable mois

int selected;
int month = 0;

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void dgvBudget_SelectedIndexChanged(object sender, EventArgs e)
    {
        lblMonth.Text = "March :";

        selected = dgvBudget.SelectedIndex;
        txtGLType.Text = dgvBudget.Rows[selected].Cells[1].Text;
        txtYear.Text = dgvBudget.Rows[selected].Cells[2].Text;
    }

    protected void btnUpdate_Click(object sender, EventArgs e)
    {
        month++;

        switch (month)
        {
            case 1:
                lblMonth.Text = "April :";
                break;

            case 2:
                lblMonth.Text = "May :";
                break;

            case 3:
                lblMonth.Text = "June :";
                break;

            case 4:
                lblMonth.Text = "July :";
                break;

            case 5:
                lblMonth.Text = "Augustus :";
                break;

            case 6:
                lblMonth.Text = "September :";
                break;

            case 7:
                lblMonth.Text = "October :";
                break;

            case 8:
                lblMonth.Text = "November :";
                break;

            case 9:
                lblMonth.Text = "December :";
                break;

            case 10:
                lblMonth.Text = "January :";
                break;

            case 11:
                lblMonth.Text = "February :";
                break;

            default:
                break;
        }
    }


1 commentaires

L'initialisation doit être sélectionnée à la sélectionIndexchanged car chaque fois que l'utilisateur choisit une nouvelle ligne, il devrait commencer à nouveau en mars et ainsi de suite.



2
votes

champs des classes ASP.NET ne sont pas conservés à travers les demandes. Chaque fois qu'une demande vient, vous obtenez une nouvelle classe, avec la même valeur par défaut de zéro pour mois .

Un moyen idiomatique de résoudre ce problème serait de faire du mois un argument - par exemple. dans une chaîne de requête. La modification du mois serait une redirection d'une nouvelle URL avec la valeur du mois suivant.

Si vous souhaitez rester près de ASP.NET WebForms Design (plutôt que des pratiques de développement Web modernes), vous pouvez également utiliser Viewstate . Cela préserve l'état dont vous avez besoin dans le navigateur et cela est envoyé dans le cadre de demandes postales. Idéalement, vous devez utiliser une propriété pour accéder au Viewstate .

En général, tandis que ASP.NET tente de cacher les différences autant que possible, les applications Web sont très différentes des applications de bureau. Vous voulez probablement commencer par une initiation à la manière dont les applications Web sont conçues et mises en œuvre, éventuellement avec une technologie plus récente que des formes Web (assurez-vous simplement de choisir en fonction de l'utilité réelle de tout cadre donné pour votre cas d'utilisation).


2 commentaires

Une redirection est un peu, surtout si les panneaux de mise à jour sont ou devraient être utilisés à l'avenir. ASP WebForms peut utiliser une chose appelée ViewState pour enregistrer des choses comme celle-ci entre les demandes. Je recommande d'utiliser une propriété pour encapsuler la viewstate


@ Trickster625 Peut-être dgvbudget_selectedexchanged est appelé et réinitialise votre mois?



0
votes

WebForms ASP sont au fur et à mesure que HTTP exige des apatrides. Cela signifie avec chaque nouvelle demande, la variable du mois est réinitialisée. Pour atténuer cela, vous devez enregistrer la sélection de l'utilisateur quelque part. ASP WebForms Utilisez des champs cachés ou des vues à cet effet. Les deux maintiennent la variable que vous souhaitez enregistrer sur les clients et le client les envoie au serveur avec chaque demande, tout comme il le ferait n'importe quel champ de saisie normal.

protected int Month
{
    get
    {
        if (ViewState["month"] == null)
        {
            ViewState["month"] = 3;
        }
        return (int)ViewState["month"];
    }
    set
    {
        // valid range for DateTime-Month is [1..12]
        if (value > 12) // check valid range
        {
            value = value % 12;
        }
        else if (value < 1)
        {
            value = 3;  // set default march
        }
        ViewState["month"] = value;
        lblMonth.Text = new DateTime(year: 1970, month: value, day: 1).ToString("MMMM") + " :";
    }
}

// ...

protected void dgvBudget_SelectedIndexChanged(object sender, EventArgs e)
    {
        Month = 3; // Reset to march

        selected = dgvBudget.SelectedIndex;
        txtGLType.Text = dgvBudget.Rows[selected].Cells[1].Text;
        txtYear.Text = dgvBudget.Rows[selected].Cells[2].Text;
    }

protected void btnUpdate_Click(object sender, EventArgs e)
    {
        Month++;
    }


0 commentaires