Не удается передать нулевой параметр в обработчик событий winform? - PullRequest
0 голосов
/ 25 апреля 2019

Я хочу впоследствии применить фильтры к моему поиску. Скажите: «если я даю 10K в качестве значения myFee, он должен показывать все предметы с тарифами 10K, однако, если после этого я даю год 2014, он должен показывать результаты, применяя одновременно плату и год ограничение

В настоящее время я получаю правильный результат, если я даю значения для обоих моих комбинированных списков одновременно (плата и год) [ИЗОБРАЖЕНИЕ НИЖЕ] https://imgur.com/a/dYpCeeP

Здесь мы вызываем GetStudentsByYearEFс параметрами, но если я попытаюсь оставить любой из входных нулей, он выдаст ошибку при передаче в качестве параметра.

            string _readYear = _yearInputBox?.SelectedItem.ToString();
            var _readFee = _feeInputBox?.SelectedItem.ToString();
            var readfee = Convert.ToInt32(_readFee);
            if (_readYear != string.Empty && readfee != null && readfee > 0)
            {
                var students = AcademyHelper.GetStudentsByYearEF(readfee, _readYear, this.dataGridView2, this, this.groupBox5);
                this.dataGridView2.DataSource = students;
            }

Определение GetStudentsByYearEF ()

    public static IEnumerable<Student> GetStudentsByYearEF(int fee, string year, DataGridView dtg, Form form, GroupBox groupbox)
    {
        List<Student> searchedStudent = new List<Student>();
        using (var retrive = new Models.Academy_MSDBEntities())
        {
            foreach (Control items in groupbox.Controls)
            {
                //removed .tolower() from here
                if (items.Name.AcademyContains("_courseInputBox") || items.Name.AcademyContains("_feeInputBox"))
                {
                    var query = retrive.Students
                     .Where(s => s.Year == year && s.Fees==fee).ToList();
                    searchedStudent.AddRange(query);
                    retrive.SaveChanges();
                }
            }
            return searchedStudent;
        }
    }

Если хотите впоследствии применитьФильтры поиска. Однако, это относится к поиску сразу после нажатия кнопки поиска, но если я попытаюсь применить только ограничение комиссии к поиску и оставив поле Год пустым, я сразу выдаю исключение.

1 Ответ

0 голосов
/ 25 апреля 2019

Пункт «Где» проверяет год и плату, если items.Name.AcademyContains("_courseInputBox") || items.Name.AcademyContains("_feeInputBox")

Таким образом, если ваша Академия содержит поле inputinput OR feeinputbox, оно будет выполнять условие where. Таким образом, если Академия содержит поле inputinputbox, но не содержит feeinputbox, ваш оператор caluse попытается отфильтровать со значением платы.

Вам нужно добавить нулевой чек для оплаты перед запуском предложения where. Что-то вроде:

if(fee != null){
                 var query = retrive.Students
                 .Where(s => s.Year == year && s.Fees==fee).ToList();
                searchedStudent.AddRange(query);
                retrive.SaveChanges();
}else{                                                              
               var query = retrive.Students
                 .Where(s => s.Year == year).ToList();
                searchedStudent.AddRange(query);
                retrive.SaveChanges();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...