[英]C# problem with SelectedIndexChanged method on combobox
我正在學習 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
停止顯示后,數據庫中的所有文本框和 combobox 值。 這導致方法中的計算不起作用,因為(int.Parse(cb_number_days_week.Text))
被視為 null。
我該如何解決?
在您的cb_number_hours_SelectedIndexChanged
事件處理程序中,嘗試在代碼的 rest 之前添加一個有效值檢查,如下所示(未經測試):
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.