Это первый раз, когда задаешь вопрос здесь, а не на английском языке.
Поэтому, если мой вопрос неоднозначен, я сожалею об этом.
[Среда разработки: Windows10, Visual Studio 2017, .net framework 4.7.2]
Я работаю над приложением Windows Form.
Как лучше всего реализовать следующую функцию.
В пользовательском интерфейсе есть 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();
}