Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/40: Рейтинг темы: голосов - 40, средняя оценка - 4.63
23Alex24
195 / 195 / 5
Регистрация: 24.07.2010
Сообщений: 1,310
1

BindingSourse.Filter и Like

18.11.2011, 11:29. Просмотров 7806. Ответов 9
Метки нет (Все метки)

Здравствуйте, подскажите пожалуйста как выполнить Like запрос для чисел и dateTime? со строками все нормально работает, а как дело доходит до цифр, то беда сразу, в инете рыскал ни че нормального не нашел, пример строки кода:

C#
1
bind.Filter = comboBox1.Text + " LIKE " + "'" + tb.Text + "%'";
В комбобоксе находятся названия таблиц, в текстбоксе значение, когда в текстбоксе строка, то все нормально, а когда число или дата, то выдает ошибку:

Невозможно выполнить операцию "Like" над System.Int32 и System.String.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2011, 11:29
Ответы с готовыми решениями:

Bindingsourse и null
Не подскаете как организовать проверку через bindingsourse на null(т.е если на текущей позиции...

Filter в базе данных
Имеется форма, необходимо при нажатии кнопки "поиск", чтоб считывалась информация с textbox и...

Не работает Filter в BindingSource
Помогите разобраться. Нужно заставить BindingSource отображать только определенные записи, у...

Использование BindingSource.Filter
Ребята подскажите пожалуйста... Есть датагрид к ней подключена таблица и использую метод ниже для...

DataCridView и BindingSource.Filter
Есть DataCridView с набором данных. В нем применяется фильтрация Запрос4BindingSource.Filter =...

9
Петррр
6168 / 3469 / 898
Регистрация: 28.10.2010
Сообщений: 5,928
18.11.2011, 12:23 2
C#
1
2
//Число без кавычек, апострофов и т.д.
"Поле LIKE Число";
0
23Alex24
195 / 195 / 5
Регистрация: 24.07.2010
Сообщений: 1,310
18.11.2011, 12:28  [ТС] 3
C#
1
bind.Filter ="ID_операции LIKE 1%";
Ошибка: Синтаксическая ошибка: отсутствует операнд после оператора "Mod".

C#
1
bind.Filter ="ID_операции LIKE 1'%'";
Синтаксическая ошибка: отсутствует операнд после оператора "'%'".

C#
1
bind.Filter ="ID_операции LIKE 1";
Ошибка:Невозможно выполнить операцию "Like" над System.Int32 и System.Int32.
0
Петррр
6168 / 3469 / 898
Регистрация: 28.10.2010
Сообщений: 5,928
18.11.2011, 12:46 4
C#
1
bind.Filter ="ID_операции = 1";
0
23Alex24
195 / 195 / 5
Регистрация: 24.07.2010
Сообщений: 1,310
18.11.2011, 13:06  [ТС] 5
Мне надо именно через оператор Like, чтобы рег. выражение было text% то есть для поиска - пользователь начинает вводить и ему выводятся все результаты, которые начинаются с тех символов, которые он уже ввел и после произвольный текст

Добавлено через 6 минут
C#
1
bind.Filter = string.Format("CONVERT(ID_операции, varchar) LIKE '{0}'", tb.Text);
Так тоже ругается, причем так: Недопустимое имя типа "varchar".

на стринг тоже ругается

Добавлено через 11 минут
В SQL mangment такой запрос выполняется нормально без ошибок, судя по всему с конвертацией какие-то проблемы(
0
23Alex24
195 / 195 / 5
Регистрация: 24.07.2010
Сообщений: 1,310
22.11.2011, 17:03  [ТС] 6
С датой еще хуже почему то - там даже не через Лайк, а просто через = ругается, че делать?) В Мсдне фиг че найдешь блин)
0
Петррр
6168 / 3469 / 898
Регистрация: 28.10.2010
Сообщений: 5,928
22.11.2011, 18:04 7
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
 
public class Sample: Form
{
    public Sample()
    {
        this.Grid = new DataGridView {
            Top = 10,
            Left = 10, 
            Width = this.ClientRectangle.Width - 20,
            Height = this.ClientRectangle.Height - 60,
            Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top
        };
        this.Controls.Add(Grid);
        this.DataSet = new DataSet();
        this.DataSet.Tables.Add("Persons");
        this.DataSet.Tables[0].Columns.Add("Name", typeof(string));
        this.DataSet.Tables[0].Columns.Add("Age", typeof(byte));
        
        this.ApplyFilter = new Button {
            Text = "Apply",
            Left = 10,
            Top = this.Grid.Bottom + 10,
            Anchor = AnchorStyles.Left | AnchorStyles.Bottom
        };
        this.Controls.Add(this.ApplyFilter);
        this.FilterValue = new TextBox {
            Left = this.ApplyFilter.Right + 10,
            Top = this.ApplyFilter.Top,
            Anchor = AnchorStyles.Left | AnchorStyles.Bottom
        };
        this.Controls.Add(this.FilterValue);
        this.BindingSource = new BindingSource(this.DataSet, "Persons");
        this.Grid.DataSource = this.BindingSource;
        this.Grid.AllowUserToAddRows = false;
        var persons = new[] {
            new { Name = "Вася",  Age = 16 },
            new { Name = "Витя",  Age = 17 },
            new { Name = "Миша",  Age = 18 },
            new { Name = "Коля",  Age = 19 },
            new { Name = "Петя",  Age = 20 },
            new { Name = "Яша",   Age = 21 },
            new { Name = "Алена", Age = 22 },
            new { Name = "Ирина", Age = 23 },
            new { Name = "Даша",  Age = 24 },
            new { Name = "Юля",   Age = 25 }
        };
        foreach (var person in persons)
        {
            DataRow row = ((DataRowView)this.BindingSource.AddNew()).Row;
            row["Name"] = person.Name;
            row["Age"] = person.Age;
            this.BindingSource.EndEdit();
        }
        this.FilterValue.Text = "2*";
        this.ApplyFilter.Click += delegate {
            if (this.FilterValue.TextLength == 0)
                this.BindingSource.Filter = string.Empty;
            else
                this.BindingSource.Filter = string.Format("CONVERT(Age, 'System.String') LIKE '{0}'", this.FilterValue.Text);
        };
    }
 
    public DataGridView Grid
    {
        get;
        set;
    }
 
    public Button ApplyFilter
    {
        get;
        set;
    }
 
    public BindingSource BindingSource
    {
        get;
        set;
    }
 
    public DataSet DataSet
    {
        get;
        set;
    }
 
    public TextBox FilterValue
    {
        get;
        set;
    }
    public static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.Run(new Sample());
    }
}
Вот накидал пример. Если откомпилировать, запустить и нажать кнопку Apply то выведется список людей чей возраст начинается с цифры два.

DataColumn.Expression Property
5
23Alex24
195 / 195 / 5
Регистрация: 24.07.2010
Сообщений: 1,310
23.11.2011, 08:41  [ТС] 8
Попозже попробую, если получится вообще красота будет)

Добавлено через 1 час 23 минуты
Вот ведь гадство)) Работает))) Спасибо огромное, а для типа DateTime будет System.DateTime? мы указываем там тип для VS или для MSSQL ?)

Добавлено через 6 минут
Все, для даты так же System.String работает =))
0
vicbel
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 5
27.11.2011, 01:30 9
спасибо за пример, использую его в своем проекте, работает.

но!!!

необходимо вводить полное значение, только тогда находит...

т.е. в таблице есть слово "Зеленый", если искать "Зел", то не находит... что делать? перерыл все, не могу найти.... использовать SQL не хочу.... можно как нибудь заставить через BindingSource.Filter работать корректно?

вот код:
vb.net
1
Me.Tbl_namesBindingSource.Filter = String.Format("CONVERT(fam, 'System.String') LIKE '{0}'", FAM_add_text.Text)
 Комментарий модератора 
Создавайте свою тему.
0
23Alex24
195 / 195 / 5
Регистрация: 24.07.2010
Сообщений: 1,310
27.11.2011, 07:08  [ТС] 10
Если ты ищешь в текстовом столбце, то тебе не надо конвертировать!!
И все дело в знаке % он означает любые символы, если поставишь до, то любые символы до введенного текста, если после, то любые символы после введенного текста, а если и до и после, он будет искать совпадения вообще в тексте
C#
1
Me.Tbl_namesBindingSource.Filter = String.Format("fam LIKE '{0}%'", FAM_add_text.Text)
вот и все)
1
27.11.2011, 07:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2011, 07:08

BindingSource игнорирует Filter
Помогите, пожалуйста, справиться с BindingSource.Filter. Не могу понять, что я делаю не так, вот...

Filter. Множественный запрос
Как правильно вывести AND. Если есть запрос и информация формируется из разных checkedBox. И в...

BindingSource.Filter и Application.Run
Появилась очень странная проблема, смысл которой я никак не могу понять. Делаю простой фильтр с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru