Integra Belm Ответов: 1

База данных несколько критериев поиска


Привет, ребята , у меня есть эта база данных https://ibin.co/2phSKY8PfVSs.png[^]
я хочу искать детей с фамилия " Смит" и их пол- " мужской"
у меня есть текстовое поле для ввода фамилии и combobox для выбора пола и кнопка для получения результата, когда я нажимаю кнопку, она получает только имя и пренебрегает условием пола.
вот мой код :

private DataTable tb1 = new DataTable();


private DataTable GetTbb()
        {
            //  DataTable tb1 = new DataTable();
            string conectingstrng = ConfigurationManager.ConnectionStrings["hsmcntr.Properties.Settings.tbbConnectionString"].ConnectionString;
            using (OleDbConnection con = new OleDbConnection(conectingstrng))
            {
                using (OleDbCommand cmd = new OleDbCommand("Select *from Table1", con))
                {
                    con.Open();
                    OleDbDataReader reader = cmd.ExecuteReader();
                    tb1.Load(reader);

                }
            }
            return tb1;

        }

private void GETRSLT(string Nme, string Gndr, ComboBox nme, ComboBox gndr)
       {
           DataView dvtble = tb1.DefaultView;
           dvtble.RowFilter = Nme + "Like '%" + nme.SelectedItem + "%'" + Gndr + "Like '%"  + gndr.SelectedItem + "%'";
       }


private void button1_Click(object sender, EventArgs e)
        {   
GETRSLT("Nme","Gndr",textbox1,combobox1)}


Что я уже пробовал:

Пробовал все в уме, но безрезультатно.
поискал на YouTube и в google и не нашел ничего, связанного с моим вопросом.

0x01AA

Попробуй
двтбл.RowFilter = Nme + "Like' % " + nme.Элемент + "%'" + " И " + Gndr + "Like' % " + gndr.Элемент + "%'";

1 Ответов

Рейтинг:
12

0x01AA

Вам нужно объединить два логических выражения (Nme, как %x%, Gndr, как %y%) с помощью логического оператора, в данном случае это "и".

dvtble.RowFilter = Nme + "Like '%" + nme.SelectedItem + "%'" + " AND " + Gndr + "Like '%"  + gndr.SelectedItem + "%'";

Здесь вы найдете хорошее резюме о синтаксисе фильтра:
Синтаксис DataView RowFilter [C#][^]
Надеюсь, это поможет.

[Редактировать] Есть также недостающие пространства перед" подобным " оператором
dvtble.RowFilter = Nme + " Like '%" + nme.SelectedItem + "%'" + " AND " + Gndr + " Like '%"  + gndr.SelectedItem + "%'";


Integra Belm

thanx для ссылки это действительно полезно для увеличения моих знаний , так как для кода теперь он дает мне необработанное исключение типа "System. Data.SyntaxErrorException" произошло в System.Data.dll

Дополнительная информация: синтаксическая ошибка: отсутствует операнд после оператора " %Smith%".

0x01AA

Можете ли вы разместить здесь фактическое выражение фильтра, для которого возникает исключение?

Integra Belm

GETRSLT частный недействительными(НСВ строку, строку Гндр, НСВ текстовое поле, поле со списком гндр)
{
DataView dvtble = tb1. DefaultView;
двтбл.RowFilter = Nme + "Like' % " + nme.Текст + " % '" + " и " + Gndr+", как "%" + gndr.Элемент + "%'";
}

частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{

GETRSLT ("Last_Name", "Gender", textBox1, comboBox1);
}

0x01AA

Я имею в виду публикацию действительно последней строки, которую вы назначаете dvtble.RowFilter.

Integra Belm

Я ввожу слово " Смит "в текстовое поле и выбираю" женщина " из выпадающего списка.

0x01AA

Я думаю, что некоторые пробелы отсутствуют, я отмечаю их буквой " * " ниже:
двтбл.RowFilter = Nme + "* Like ' % " + nme.Текст + " % '" + " и "+ Gndr + "* как " % " + gndr.Элемент + "%'";
}

Integra Belm

хорошо, я попробую это сделать, заранее спасибо: D.

Integra Belm

хорошо, теперь он получает необходимые результаты, когда comboBox установлен на "женский", но когда он установлен на" мужской", он получает как женские, так и мужские результаты.

0x01AA

Отличное, счастливое кодирование :-)
[Редактировать]
Извините, я думал, что это решено.... :-)
Сейчас почему то показывает также felmale? Подумайте о "женщине" в данных, отфильтрованных по "%male%", она идеально подходит ;)

"Gndr = '" + gndr.SelectedItem + "'" решит эту проблему.