C # проблема с методом SelectedIndexChanged в выпадающем списке - PullRequest
0 голосов
/ 11 июля 2011

Я изучаю C # и создаю специальное приложение для расчета заработной платы.У меня есть форма для периодов работодателя, которая позволяет пользователю вводить / редактировать или удалять один период начисления заработной платы за раз, т. Е. В данный момент в базе данных может быть только одна запись.

У меня есть методпри загрузке формы, которая будет извлекать все необходимые поля, если существует период начисления заработной платы.

Код:

private void PayrollPeriodForm_Load(object sender, EventArgs e)
{
    dateTimePicker2.Value = dateTimePicker2.Value.AddYears(1).AddDays(-1);

    // Get service instance
    var employerPeriodService = Program.Kernel.Get<IEmployerPeriodService>();

    //Query database
    var employerPeriods = employerPeriodService.GetAllEmployerPeriods();                                      

    if (employerPeriods.Any(x => x != null))
    {
        var employerPeriod = employerPeriods.First();

        txt_tax_year.Text = employerPeriod.U_Tax_year.ToString();
        lbl_code.Text = employerPeriod.Code;
        cb_number_hours.Text = employerPeriod.U_Day_hrs.ToString();
        cb_number_days_week.Text = employerPeriod.U_Week_days.ToString();
        cb_number_days_month.Text = employerPeriod.U_Month_days.ToString();
        cb_number_days_fortnight.Text = employerPeriod.U_Fortnight_days.ToString();
        txt_number_hours_week.Text = employerPeriod.U_Week_hrs.ToString();
        txt_number_hours_fortnight.Text = employerPeriod.U_Fortnight_hrs.ToString();
        txt_number_hours_month.Text = employerPeriod.U_Month_hrs.ToString();
        cb_avg_weeks_month.Text = employerPeriod.U_Weeks_in_month.ToString();
        cb_avg_fortnights_month.Text = employerPeriod.U_No_of_Fortnights.ToString();
        dateTimePicker1.Text = employerPeriod.U_Starting_period.ToString();
        dateTimePicker2.Text = employerPeriod.U_Ending_period.ToString();

        txt_tax_year.Enabled = false;
        dateTimePicker1.Enabled = false;
        dateTimePicker2.Enabled = false;
        btn_add.Enabled = false;
        btn_update.Enabled = true;
        btn_delete.Enabled = true;
        btn_update.Visible = true;
        btn_delete.Visible = true;
        btn_add.Visible = false;

        // Store SAP code
        SAPCodePeriod = employerPeriod.Code;
    }
    else
    {
        //clear textfields after input
        cb_number_hours.SelectedIndex = 0;
        cb_number_days_week.SelectedIndex = 0;
        txt_number_hours_week.Text = "";
        cb_number_days_month.SelectedIndex = 0;
        txt_number_hours_month.Text = "";
        cb_number_days_fortnight.SelectedIndex = 0;
        txt_number_hours_fortnight.Text = "";
        cb_avg_weeks_month.Text = null;
        cb_avg_fortnights_month.Text = null;
        lbl_code.Text = "";

        txt_tax_year.Enabled = true;
        dateTimePicker1.Enabled = true;
        dateTimePicker2.Enabled = true;
        btn_add.Enabled = true;
        btn_update.Enabled = false;
        btn_delete.Enabled = false;
        btn_add.Visible = true;
        btn_update.Visible = false;
        btn_delete.Visible = false;
    }
}

На данный момент у меня есть два события изменения выбранного индекса для 2 из моих списков:

private void cb_number_hours_SelectedIndexChanged(object sender, EventArgs e)
{
    // calculate hours/week
    var hoursWeek = (int.Parse(cb_number_hours.Text)) * (int.Parse(cb_number_days_week.Text));

    txt_number_hours_week.Text = hoursWeek.ToString();
}

private void cb_number_days_week_SelectedIndexChanged(object sender, EventArgs e)
{
    // calculate hours/week
    var hoursWeek = (int.Parse(cb_number_hours.Text)) * int.Parse(cb_number_days_week.Text);

    txt_number_hours_week.Text = hoursWeek.ToString();
}

Моя проблема: До того, как у меня появился какой-либо из методов SelectedIndexChanged, все значения из базы данных отображались в соответствующих текстовых полях и списках.

Однако после добавления метода cb_number_hours_SelectedIndexChangedвсе значения текстовых полей и списков в БД после того, как cb_number_hours.Text перестали отображаться.Это привело к тому, что расчет в методах, которые не работают, так как (int.Parse(cb_number_days_week.Text)) выглядит как ноль.

Как мне это исправить?

1 Ответ

2 голосов
/ 11 июля 2011

В вашем cb_number_hours_SelectedIndexChanged обработчике событий попробуйте добавить проверку на допустимое значение перед остальной частью вашего кода, как это (непроверено):

int hours;
int days;

if (Int32.TryParse(cb_number_hours.Text, out hours) && Int32.TryParse(cb_number_days_week.Text, out days))
{
   var hoursWeek = hours * days;
   txt_number_hours_week.Text = hoursWeek.ToString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...