|
|
|
DataGrid и фильтр
|
|||
|---|---|---|---|
|
#18+
Трабла в следующем: есть MS DataGrid Control 6.0 (SP5) (MS VC), с помощью которого выводятся на экран данные из базы данных (SQL2000) сформированные посредствам ADO-шного рекордсета. Все было бы более менее нормально, но решил я использовать метод Filter указанного выше рекордсета. Задаю условие для него - в DataGrid'е - все нормально отфильтровалось, только беда: нажимаю клавишу "стрелка вверх"- в гриде все ползет вниз, та же самая беда с полосами прокрутки (причем делается это циклически- т.е. когда доходит до последней записи- перескакивает на верхнюю запись и далее вниз). Все нормально происходит при первоначальном задании значения фильтра (первое открытие данных). При задании нового фильтра - начинаются фокусы. При повторном задании этого же самого фильтра - опять нормально. Может кто сталкивался, помогите разобраться в чем сермяжная правда. З.Ы. А вообще, есть еще что-нибудь более "продвинутое" чем MS DataGrid Control с поддержкой ADO для MS VC? Где посмотреть/взять? Спасибо за внимание... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2005, 12:24 |
|
||
|
DataGrid и фильтр
|
|||
|---|---|---|---|
|
#18+
нового вроде как ничего нет, а DataGrid очень глючный... единственное что приходит в голову, при смене фильтра переделывай привязку грида к рекордсету, если не поможет, то попробуй переоткрывать рекордсет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2005, 18:51 |
|
||
|
DataGrid и фильтр
|
|||
|---|---|---|---|
|
#18+
или еще: DataSet->Filtered=false; DataSet->Filter="..."; DataSet->Filtered=true; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2005, 18:55 |
|
||
|
DataGrid и фильтр
|
|||
|---|---|---|---|
|
#18+
Дело было в форме открытия рекордсета: не любит грид серверные курсоры- ему на клиенте подавай! А теперь вот такая заморочка: как отфильтровать по полю (тип string) с условием: not like '*abrakadabra*'. Просто like '*abrakadabra*' понимает, с отрицанием - exeption выбрасывает (что то про несовместимость типов). Т.е. как в методе Filtr (ADO Recordset) задать отрицание (в доке говорится только о =,>=,<=,<>,like) и возможно ли это вообще? И еще не понимает конструкцию типа like '*abrakadabra' (т.е. проверка на совпадение окончания). Грустно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 10:27 |
|
||
|
DataGrid и фильтр
|
|||
|---|---|---|---|
|
#18+
Filters can compare field values to literals and to constants using the following comparison and logical operators: Operator Meaning < Less than > Greater than >= Greater than or equal to <= Less than or equal to = Equal to <> Not equal to AND Tests two statements are both true NOT Tests that the following statement is not true OR Tests that at least one of two statements is true + Adds numbers, concatenates strings, adds numbers to date/time values (only available for some drivers) - Subtracts numbers, subtracts dates, or subtracts a number from a date (only available for some drivers) * Multiplies two numbers (only available for some drivers) / Divides two numbers (only available for some drivers) * wildcard for partial comparisons (FilterOptions must include foPartialCompare) By using combinations of these operators, you can create fairly sophisticated filters. Хотя LIKE я использовал и работало нормально... вместо NOT LIKE попробуй NOT (LIKE ...) а также почитай описание формата шаблона для LIKE (звездочки там нету:) % Any string of zero or more characters. _ (underscore) Any single character. [ ] Any single character within the specified range ([a-f]) or set ([abcdef]). [^] Any single character not within the specified range ([^a-f]) or set ([^abcdef]). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 11:03 |
|
||
|
DataGrid и фильтр
|
|||
|---|---|---|---|
|
#18+
не правильно написал... возможный синтаксис: field NOT LIKE 'pattern' NOT field LIKE 'pattern' NOT (field LIKE 'pattern') что-нить должно работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 11:09 |
|
||
|
DataGrid и фильтр
|
|||
|---|---|---|---|
|
#18+
Ste@lthне правильно написал... возможный синтаксис: field NOT LIKE 'pattern' NOT field LIKE 'pattern' NOT (field LIKE 'pattern') что-нить должно работать Не хотит ни так, ни эдак... По-видимому отрицания в данном методе не предусмотрено... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 12:54 |
|
||
|
DataGrid и фильтр
|
|||
|---|---|---|---|
|
#18+
ну тогда такой вариант обхода: есть некое условие LIKE: field NOT LIKE 'pattern' а теперь в запрос добавляем следующую вещь: SELECT ........, case when field NOT LIKE 'pattern' then 1 else 0 end check_field FROM ......................... а потом в фильтре вместо LIKE пишем: check_field=1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 13:21 |
|
||
|
DataGrid и фильтр
|
|||
|---|---|---|---|
|
#18+
Ste@lthну тогда такой вариант обхода: есть некое условие LIKE: field NOT LIKE 'pattern' а теперь в запрос добавляем следующую вещь: SELECT ........, case when field NOT LIKE 'pattern' then 1 else 0 end check_field FROM ......................... а потом в фильтре вместо LIKE пишем: check_field=1 Не, так тоже не пойдет: фильтрация идет по "видимым" полям в гриде и гридов этих немерено (это для каждого рекордсета надо будет менять запрос) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 07:41 |
|
||
|
DataGrid и фильтр
|
|||
|---|---|---|---|
|
#18+
ну у меня фантазия иссякла... хотя честно, я практически не использовал фильтры, предпочитал переоткрывать ADOQuery, переделывая запрос.... просто писал свой собственный VCL фильтр... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 10:03 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33014369&tid=2033460]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
4ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 397ms |

| 0 / 0 |
