Tengo un combo box que estoy usando para seleccionar un mes de un año. Los meses se proporcionan a través de un List<> que he configurado como data source. Creo que voy por esto de la manera incorrecta.

Código hasta ahora:

private void btnExport_Click(object sender, EventArgs e)
    {
        int month = 0; //just a default value
        if (cbMonth.SelectedText == "January")
            month = 1;
        else if (cbMonth.SelectedText == "Febuary")
            month = 2;
        else if (cbMonth.SelectedText == "March")
            month = 3;
        else if (cbMonth.SelectedText == "April")
            month = 4;
        else if (cbMonth.SelectedText == "May")
            month = 5;   
        else if (cbMonth.SelectedText == "June")
            month = 6;   
        else if (cbMonth.SelectedText == "July")
            month = 7;   
        else if (cbMonth.SelectedText == "August")
            month = 8;   
        else if (cbMonth.SelectedText == "September")
            month = 9;   
        else if (cbMonth.SelectedText == "October")
            month = 10;  
        else if (cbMonth.SelectedText == "November")
            month = 11;  
        else if (cbMonth.SelectedText == "December")
            month = 12;

        int year = Int32.Parse(mtbYear.Text);
        MessageBox.Show(month.ToString() + "   " + year.ToString()); // to check values

    }

Mi month nunca cambia el valor y se muestra como 0. Lo cual, entiendo porque le había dado el valor inicial de 0 para pasarlo a otro método.

Pregunta : ¿Cómo puedo obtener el valor numérico para los meses en que el usuario los selecciona de mi cuadro combinado?

0
Symon 10 sep. 2018 a las 15:58

6 respuestas

La mejor respuesta

¿Has probado el SelectedValue del cuadro combinado?

private void btnExport_Click(object sender, EventArgs e)
    {
        int month = 0; //just a default value
        var monthNumber = DateTime.ParseExact((string)cbMonth.SelectedValue, "MMMM", CultureInfo.InvariantCulture).Month;

        int year = Int32.Parse(mtbYear.Text);
        MessageBox.Show(monthNumber.ToString() + "   " + year.ToString()); // to check values

    }

No olvides agregar try-catch para ParseExact

1
Lucian 10 sep. 2018 a las 13:19

Para obtener el valor numérico de una lista, es decir

<asp:DropDownList ID="cbMonth" runat="server">
    <asp:ListItem Selected="True" Value="1" Text="January"></asp:ListItem>
    <asp:ListItem Value="2" Text="February"></asp:ListItem>
</asp:DropDownList>

El valor seleccionado de esto le dará el valor numérico:

   private void btnExport_Click(object sender, EventArgs e)
        {
            int month = cbMonth.SelectedValue;
        }
0
cullimorer 10 sep. 2018 a las 13:07

Mostrar meses en ComboBox:

comboBox1.DataSource = System.Globalization.CultureInfo.InvariantCulture
    .DateTimeFormat.MonthNames.Take(12).ToList();

Seleccionar mes actual:

comboBox1.SelectedIndex = DateTime.Now.Month - 1;

Obtener mes seleccionado:

MessageBox.Show($"Month: {comboBox1.SelectedIndex + 1} - {comboBox1.SelectedItem}");
2
Reza Aghaei 10 sep. 2018 a las 15:11

Muestre el nombre del mes al final de la fuente pero en el atributo de valor almacene el mes en número y cuando seleccione el mes del cuadro combinado en ese momento en segundo plano obtendrá el mes en dígitos

0
Akshay Jain 10 sep. 2018 a las 13:14

Puede usar el método ParseExact de DateTime. Ex -

var monthNumber = DateTime.ParseExact(cbMonth.SelectedText, "MMMM", CultureInfo.InvariantCulture).Month;
0
Sham 10 sep. 2018 a las 13:06

Hola, cada vez que te veas usando tantos, intenta simplificar la lógica.

IDictionary<string, int> monthsDictionary = new Dictionary<string, int>()
                                        {
                                            {January,"1"},
                                            {February, "2"},
                                            {March,"3"}
                                            /* And so on */
                                        };

Declare este diccionario con los meses que está utilizando. Luego puede ver cuál es el valor seleccionado del cuadro cbo y usarlo como clave. Solo asegúrese de que los valores en el cuadro cbo coincidan con las claves del diccionario. Al igual que.

private void btnExport_Click(object sender, EventArgs e)
{
    month = monthsDictionary[cbMonth.SelectedText];
    //This will give you the value of the key.
    //Ex. If march is chosen then 3 is what is given back as an int.

    int year = Int32.Parse(mtbYear.Text);
    MessageBox.Show(month.ToString() + "   " + year.ToString()); // to check values

}

¡Espero que esto ayude!

1
Shanedolin 10 sep. 2018 a las 13:15