这是第一次在这里问问题,而不是英语本地人。 因此,如果我的问题不明确,对此我感到抱歉。
[开发环境:Windows10,Visual Studio 2017,.net Framework 4.7.2]
我正在使用Windows窗体应用程序。 实现以下功能的最佳实践是什么。
在用户界面上,有4个组合框
cmbGradeFrom
:从中选择成绩范围
cmbGradeTo
:选择成绩范围
cmbClassFrom
:从以下类别中选择课程范围
cmbClassTo
:选择班级范围
更改每个组合框后,将执行每个事件处理程序,
在setEachFeeList()
方法中,有一个SQL查询,
其中要获取的目标数据从cmbGradeFrom
缩小到cmbGradeTo
从cmbClassFrom
到cmbClassTo
。并在数据网格视图上显示数据。
如代码所示,如果您更改一个组合框的选择,
它影响另一个组合框的值。
因此,仅更改组合框的值一次有时会导致
执行setEachFeeList()
方法。
我想使它就像我更改一个组合框值,其他三个组合框值更改一样,
并仅执行一次setEachFeeList()
方法。
有什么办法可以实现这个功能?
我曾尝试使用bool vairiable来检查是否需要访问数据。 我尝试删除或添加事件处理程序来控制是否需要访问数据。
/// when cmbGradeFrom changed
protected void cmbGradeFrom_TextChanged(object sender, EventArgs e)
{
if (cmbGradeFrom.Items.Count == 0 || cmbGradeTo.Items.Count == 0) return;
if (cmbGradeFrom.SelectedIndex > cmbGradeTo.SelectedIndex)
{
cmbGradeTo.SelectedIndex = cmbGradeFrom.SelectedIndex;
}
/// when cmbGradeFrom and cmbGradeTo are the same, set default cmbClassFrom and cmbClassTo
if (cmbGradeTo.SelectedIndex == cmbGradeFrom.SelectedIndex)
{
setClassFromTo();
}
else
{
//get data using sql and display
setEachFeeList();
}
}
/// when cmbGradeTo changed
protected void cmbGradeTo_TextChanged(object sender, EventArgs e)
{
if (cmbGradeFrom.Items.Count == 0 || cmbGradeTo.Items.Count == 0)
return;
if (cmbGradeFrom.SelectedIndex > cmbGradeTo.SelectedIndex)
{
cmbGradeFrom.SelectedIndex = cmbGradeTo.SelectedIndex;
}
/// when cmbGradeFrom and cmbGradeTo are the same, set default cmbClassFrom and cmbClassTo
if (cmbGradeFrom.SelectedIndex == cmbGradeTo.SelectedIndex)
setClassFromTo();
}
else
{
//get data using sql and display
setEachFeeList();
}
}
/// when cmbClassFrom changed
protected void cmbClassFrom_TextChanged(object sender, EventArgs e)
{
if (cmbClassFrom.Items.Count == 0 || cmbClassTo.Items.Count == 0) return;
if (cmbClassFrom.SelectedIndex > cmbClassTo.SelectedIndex)
{
cmbClassTo.SelectedIndex = cmbClassFrom.SelectedIndex;
}
//get data using sql and display
setEachFeeList();
}
/// when cmbClassTo changed
protected void cmbClassTo_TextChanged(object sender, EventArgs e)
{
if (cmbClassFrom.Items.Count == 0 || cmbClassTo.Items.Count == 0) return;
if (cmbClassFrom.SelectedIndex > cmbClassTo.SelectedIndex)
{
cmbClassFrom.SelectedIndex = cmbClassTo.SelectedIndex;
}
//get data using sql and display
setEachFeeList();
}