2011-07-11 13 views
0

私はC#を学び、カスタムPayrollアプリケーションを作成しています。私は、ユーザが一度に1つの給与計算期間を入力/編集または削除することを可能にする雇用者期間用の書式を有している。すなわち、所与の時間にデータベース内に1つのレコードしか存在しない。ComboboxのSelectedIndexChangedメソッドの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つのselectdインデックスは、これまでの私のコンボボックスの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メソッドを追加した後、​​以降のDBのテキストボックスとコンボボックスの値はすべて表示されなくなりました。結果として、(int.Parse(cb_number_days_week.Text))として機能しないメソッドの計算はnullとみなされます。

これを修正するにはどうすればよいですか?あなたのcb_number_hours_SelectedIndexChangedイベントハンドラで

+0

これは、あなたの質問に答えていませんが、次は無意味です:employerPeriodServiceでEPからのvar employerPeriodsの= .GetAllEmployerPeriods() select ep; var employerPeriods = employerPeriodService.GetAllEmployerPeriods();を書くことができます。代わりに – Dismissile

+0

true;どこから選んでいたのですが、不要なものを取り除くのを忘れた –

答えて

2

、あなたのコードの残りの部分の前にadding a check for a valid valueを試してみてください、この(未テスト)のように:

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(); 
} 
+0

お返事ありがとうございます。 –