Использование комбинированного списка для критериев поиска - PullRequest
2 голосов
/ 15 октября 2010

Я относительно новичок в winforms и C #, и я разрабатываю приложение, которое позволит пользователям выполнять поиск. Для поиска данных они могут использовать следующее:

-Комбобокс с 6 вариантами

-текстовое поле, в которое они будут вводить информацию в соответствии с выбранным списком поиска.

У меня есть хранимая процедура с параметром для каждого из параметров поиска. Процедура работает для поиска по любому из вариантов. Эта процедура была добавлена ​​в проект, и я подключаюсь к нему через TableAdapter.

То, с чем я борюсь, - это лучший способ передать каждый из этих критериев поиска в код. Я начал это так:

public void DataRefresh(string searchCombo, string searchValue)
    {
        string returnMessage = string.Empty;
        switch (searchCombo)
        {
            case "Acct":
                Data.Manager.TAM.SearchDataTableAdapter.Fill(DataSet.spSearchData, ref returnMessage, searchValue, null, null, null, null, null);
                break;
        }
        SearchDataBindingSource.DataSource = DataSet.spSearchData;
    }

Сначала я думал, что смогу использовать переключатель / регистр для передачи параметров на основе того, что было отправлено пользователем.

Есть ли лучший способ сделать это? Я думаю, что да, но я не могу придумать способ.

Любые предложения будут великолепны!

Ответы [ 2 ]

1 голос
/ 15 октября 2010

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

На мой взгляд, searchCriteria может быть объектом, что делает его многоразовым для других поисков.

Следуя совету @ saurabh, вы можете упростить его использование, так как вы можете, если вы используете .NET 3.5, использовать запросы Linq в своем поиске.

Тогда ваш ComboBox должен содержать имена свойств этого поискового объекта, тогда вы можете просто пойти так:

public void DataRefresh(string comboBoxPropertyName, object value) {
    var query = from s in searchResults
                where (s.GetType().GetProperties()[comboBoxPropertyName].GetValue(s) = value)
                select s

    SearchDataBindingSource.DataSource = query.ToList();
}

Где searchResults представляет результат вашего SP. Возможно, вам понадобится приведение из вашего TableAdapter, я не знаю. Я никогда не использовал этот класс.

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

1 голос
/ 15 октября 2010

Я нашел другой способ сделать это, вместо передачи 6 параметров в хранимую процедуру, я изменил его, передав только два значения в поле со списком и значение текстового поля. Затем я помещаю операторы If в хранимую процедуру, чтобы обрабатывать передаваемые значения.

Спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...