Как прекратить выполнение сбора и отображения данных в обработчике событий - PullRequest
0 голосов
/ 22 апреля 2019

Это первый раз, когда задаешь вопрос здесь, а не на английском языке. Поэтому, если мой вопрос неоднозначен, я сожалею об этом.

[Среда разработки: 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...