4 votes

créer une chaîne relative en fonction des options sélectionnées dans une liste de cases à cocher en asp.net

Je suis en train de créer un système de gestion de cabinet où j'ai besoin d'ajouter une fonctionnalité permettant à une clinique ou à un hôpital d'ajouter des médecins visiteurs dans leurs cliniques ou hôpitaux. Voici mon interface actuelle. enter image description here

Ici, la clinique ou l'hôpital sélectionne le jour et met l'heure, de sorte que tous les jours sélectionnés reçoivent cette heure. Je veux maintenant créer une chaîne de caractères dans laquelle les valeurs sont stockées comme ceci

Lun, mer, ven
10.00 - 14.00

Je peux exécuter la chaîne ci-dessus avec le code suivant

string selectedDays = string.Empty;
foreach (ListItem chk in daySelect.Items) {
    if (chk.Selected == true) {
        selectedDays += chk.Text + ",";
    }
}

string vistingDays = string.Empty;
vistingDays = selectedDays + "<br />" + frmTime.SelectedValue.ToString + "-" + ToTime.SelectedValue.ToString;

Et si les jours sont sélectionnés en continu, c'est-à-dire lundi, mardi, mercredi, jeudi, il faut obtenir des valeurs de chaîne comme ceci. La seule différence est que si l'on a sélectionné plus de 2 jours en continu, le séparateur est un tiret au lieu d'une virgule.

Lun - Jeu
10h00 - 14h00

J'ai besoin d'aide pour effectuer l'opération ci-dessus avec mon code. Je vous prie de m'excuser si mon message est compliqué, mais j'ai vraiment besoin d'aide.

0voto

Denis Points 4290

Si quelqu'un a une solution intelligente utilisant LINQ ou moins de code, je serais ravi de la voir, mais si personne ne répond, vous pouvez utiliser mon code, mais testez-le correctement pour tous les scénarios possibles :

protected void btnSave_Click(object sender, EventArgs e)
{
    string selectedDays = String.Empty;
    int j = 0;

    var items = new Dictionary<int,string>();

    for (int i = 0; i < daySelect.Items.Count; i++)
        items.Add(i, daySelect.Items[i].Selected ? daySelect.Items[i].Text : "");

    for (int i = 0; i < items.Count; i++ )
    {
        string current = items.ElementAt(i).Value;

        if(String.IsNullOrEmpty(selectedDays))
        {
            j = items.ElementAt(i).Key;
            selectedDays = current;
            continue;
        }
        else if(current != "")
        {
            if((j + 1) == i)
            {
                int lastComma = selectedDays.LastIndexOf(',');
                int lastDash = selectedDays.LastIndexOf('-');

                if ((selectedDays.Contains('-') && !selectedDays.Contains(',')) || lastDash > lastComma)
                {
                    string day = selectedDays.Substring(selectedDays.LastIndexOf('-') + 1, 3);
                    selectedDays = selectedDays.Replace(day, current);
                }
                else
                    selectedDays += ("-" + current);

                j = items.ElementAt(i).Key;
            }
            else
            {
                selectedDays += "," + current;
                j = items.ElementAt(i).Key;
            }
        }
    }

    string vistingDays = selectedDays + "<br />" + frmTime.SelectedValue.ToString() + "-" + ToTime.SelectedValue.ToString();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X