Сортировка с одной таблицей

отредактировано October 2009 Раздел: FastReport .NET
Извините, если уже обсуждалось.

1) Имеем одну таблицу с полями R1,R2,R3 и т.д. Создаем новый диалог в дизайнере, тащим на него R1 для выбора фильтра
Все работает, но когда в поле R1, например присутствует 30 значений "пример", 40 значений "пример2" , в диалоге показываются все 70 значений.
Как показать в списке фильтра 2 значения - "пример" и "пример2"? Типа сгруппировать :)


2) Имеем одну таблицу с полями R1,R2,R3 и т.д.
R2-Date
R3-string
R4-string
.....
R55 string

Как правильно передать в отчет несколько параметров для фильтра и в самом отчете это указать,
если нужно чтобы R2 попадал в диапазон дат (от и до включительно), R3 было равно некой строке?


3)По принудительной локализации видел тему, для VB.NET подскажите плиз кусок кода

Комментарии

  • отредактировано 11:22
    Строго говоря, надо бы использовать для этих целей поля, содержащие уникальные значения. Впрочем, не проблема это исправить - постараюсь сделать в следующем билде (завтра).

    По принудительной локализации:
    Res.LoadLocale("Russian.frl");
  • отредактировано 11:22
    2) Перетащите поле R2 на форму два раза, FastReport сообразит, что нужна фильтрация по диапазону. Поле R3 тоже перетащите на форму. Получится фильтр, объединяющий оба условия ("И").
  • отредактировано 11:22
    AlexTZ написал: »
    Строго говоря, надо бы использовать для этих целей поля, содержащие уникальные значения. Впрочем, не проблема это исправить - постараюсь сделать в следующем билде (завтра).

    По принудительной локализации:
    Res.LoadLocale("Russian.frl");

    Imports FastReport.Utils

    и

    Res.LoadLocale("Russian.frl")

    получилось, спасибо!
  • отредактировано 11:22
    AlexTZ написал: »
    2) Перетащите поле R2 на форму два раза, FastReport сообразит, что нужна фильтрация по диапазону. Поле R3 тоже перетащите на форму. Получится фильтр, объединяющий оба условия ("И").

    Визуально - получается и работает.
    Мне кодом нужно.
    Ну и вдогонку - какой символ в фильтре поставить, чтобы все значения попали.
  • отредактировано 11:22
    Кодом - в смысле, написать выражение фильтрации для бэнда "Данные"? Поясните.
    Чтобы попали все значения, фильтр надо отключить. Можно поставить контролу Enabled = false.
  • отредактировано October 2009
    Имеем одну таблицу с полями R1,R2,R3 и т.д.
    R2-Date
    R3-string
    R4-string
    .....
    R55 string

    Как правильно передать в отчет несколько параметров для фильтра и в самом отчете это указать,
    если нужно чтобы R2 попадал в диапазон дат (от и до включительно), R3 было равно некой строке?

    Т.е.
    в коде программы, вызывающей отчет я пишу примерно так
    report1.load
    Report1.SetParameterValue("ParamR3", "test")
    задаю параметры для дат

    в отчете у меня есть переменные ParamR3 и т.п.
    как в самом отчете это указать,
    если нужно чтобы R2 попадал в диапазон дат (от и до включительно), R3 было равно некой строке
    фактически - выражение фильтрации для бэнда "Данные"
    но есть момент: для R3 может указываться конкретное значение или все данные
  • отредактировано October 2009
    Теперь понятно. Нужно завести два параметра - ParamR2Start и ParamR2End типа DateTime, содержащие начальную и конечную дату. Фильтр будет выглядеть так:

    [Table.R2] >= [ParamR2Start] && [Table.R2] <= [ParamR2End] && (bool)IIf(String.IsNullOrEmpty([ParamR3]), true, [Table.R3] == [ParamR3])

    (если для отчета выбран язык VB, это надо переписать на VB)
    Если ParamR3 пустой, будут выбраны все данные.
  • отредактировано 11:22
    AlexTZ написал: »
    Теперь понятно. Нужно завести два параметра - ParamR2Start и ParamR2End типа DateTime, содержащие начальную и конечную дату. Фильтр будет выглядеть так:

    [Table.R2] >= [ParamR2Start] && [Table.R2] <= [ParamR2End] && (bool)IIf(String.IsNullOrEmpty([ParamR3]), true, [Table.R3] == [ParamR3])

    (если для отчета выбран язык VB, это надо переписать на VB)
    Если ParamR3 пустой, будут выбраны все данные.

    бум пробовать

    спасибо за оперативность!
    приятно работать с Вами и Вашим продуктом :)
  • отредактировано 11:22
    Спасибо за добрые слова! :)
  • отредактировано October 2009
    Это не получилось, все время ошибки или зависает в момент построения отчета
    [Table.R2] >= [ParamR2Start] && [Table.R2] <= [ParamR2End] && (bool)IIf(String.IsNullOrEmpty([ParamR3]), true, [Table.R3] == [ParamR3])

    Более подробно - имеем простую таблицу с полями [P1],[P2],[P3],[P4],[P5]
    [Param1] = или "*" или значение, если "*" - то выбрать все значения по полю [P1]
    [Param2] - если False, то берем все значения по полям [P3] и [P4]
    если True, то выбираем по параметру [Param3] поля [P3]
    и по параметру [Param4] поля [P4]
    [Date1] - просто дата начала по полю [P5]
    [Date2] - просто дата окончания по полю [P5]

    Все это выражение могу передать из программы, но пока не воспринимает.


    По 1 вопросу хотелось бы увидеть изменения.
    Просто очень много однотипных баз, с одинаковыми таблицами,
    добавление еще одной таблицы ради отчета не хотелось бы.
    А с виртуальной таблицей, содержащей группировку - выводит на форме, но не фильтрует в отчете

    Спасибо.
  • отредактировано 11:22
    написал:
    Это не получилось, все время ошибки или зависает в момент построения отчета
    [Table.R2] >= [ParamR2Start] && [Table.R2] <= [ParamR2End] && (bool)IIf(String.IsNullOrEmpty([ParamR3]), true, [Table.R3] == [ParamR3])

    Прежде чем запостить это в форум, я проверил работу на отчете из демо. Все работает как положено.
    написал:
    Более подробно - имеем простую таблицу с полями [P1],[P2],[P3],[P4],[P5]

    Используйте ф-ю IIf для проверки таких условий, по аналогии с тем что написал я:

    (bool)IIf([Param1] == "*", true, [Table.P1] == [Param1]) && (bool)IIf([Param2] == false, true, [Table.P3] == [Param3] && [Table.P4] == [Param4]) && [Table.P5] >= [Date1] && [Table.P5] <= [Date2]
    написал:
    По 1 вопросу хотелось бы увидеть изменения.

    Версия, в которой это исправлено, соберется через 20 минут.
  • отредактировано October 2009
    AlexTZ написал: »
    Прежде чем запостить это в форум, я проверил работу на отчете из демо. Все работает как положено.
    Используйте ф-ю IIf для проверки таких условий, по аналогии с тем что написал я:

    (bool)IIf([Param1] == "*", true, [Table.P1] == [Param1]) && (bool)IIf([Param2] == false, true, [Table.P3] == [Param3] && [Table.P4] == [Param4]) && [Table.P5] >= [Date1] && [Table.P5] <= [Date2]
    Версия, в которой это исправлено, соберется через 20 минут.

    Первый вопрос снят окончательно - все работает, огромное спасибо! :)

    А реально из программы добраться до
    Data Sources - Connection - Table -SelectCommand, и поменять SelectCommand ?
    Когда в таблице колтчество записей больше миллиона, предварительный фильтр сыграл бы свою роль :)
  • отредактировано 11:22
    Легко:

    TableDataSource table = report.GetDataSource("MyTable") as TableDataSource;
    table.SelectCommand = "...";
  • отредактировано 11:22
    AlexTZ написал: »
    Легко:

    TableDataSource table = report.GetDataSource("MyTable") as TableDataSource;
    table.SelectCommand = "...";

    все отлично работает и скорость теперь нормальная.
    Спасибо :)
  • отредактировано 11:22
    Применил условия фильтрации при загрузке отчета,
    с миллионами записей работает нормально!
    :)

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.