Получить числовое значение месяца с помощью поля со списком C # - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть combo box, который я использую, чтобы выбрать месяц из года. Месяцы предоставляются через List<>, который я установил как data source. Я полагаю, что поступаю неправильно.

Код до сих пор:

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

    }

My month никогда не изменяет значение и отображается как 0. Что, я понимаю, потому что я дал ему начальное значение 0, чтобы передать его другому методу.

Вопрос : Как я могу получить числовое значение для месяцев, когда пользователь выбирает их из моего поля со списком?

Ответы [ 6 ]

0 голосов
/ 10 сентября 2018

Показать месяцы в ComboBox:

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

Выбрать текущий месяц:

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

Получить выбранный месяц:

MessageBox.Show($"Month: {comboBox1.SelectedIndex + 1} - {comboBox1.SelectedItem}");
0 голосов
/ 10 сентября 2018

Вы пробовали выбранное значение комбинированного списка?

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

    }

Не забудьте добавить try-catch для ParseExact

0 голосов
/ 10 сентября 2018

Эй, всякий раз, когда вы видите, что используете это множество if elses, попробуйте упростить логику.

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

Объявите этот словарь с месяцами, которые вы используете.Затем вы можете просто посмотреть, какое значение выбрано в поле cbo, и использовать его в качестве ключа.Просто убедитесь, что значения в поле cbo соответствуют ключам в словаре.Вот так.

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

}

Надеюсь, это поможет!

0 голосов
/ 10 сентября 2018

Отображение названия месяца в конце шрифта, но в атрибуте значения сохраните месяц в номере, и когда вы выберете месяц из поля со списком в то время в фоновом режиме, вы получите месяц в цифре

0 голосов
/ 10 сентября 2018

Чтобы получить числовое значение из списка, т.е.

<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>

Выбранное значение даст числовое значение:

   private void btnExport_Click(object sender, EventArgs e)
        {
            int month = cbMonth.SelectedValue;
        }
0 голосов
/ 10 сентября 2018

Вы можете использовать ParseExact метод DateTime. Ex -

var monthNumber = DateTime.ParseExact(cbMonth.SelectedText, "MMMM", CultureInfo.InvariantCulture).Month;
...