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

отредактировано 15:23 Раздел: FastReport .NET
У меня есть таблица, в которой при определенных условиях надо скрывать некоторые строки.

Я пробовал использовать TableRow.Visible в событии BeforePrint, но это не работает, строки все равно видны. Побившись, обнаружил, что если одновременно выставить Visible = false и для ячеек в этой строке, то тогда строка невидима (выставлдять для самой строки все равно надо, иначе остается пустая строчка).

Можно ли в будущем релизе сделать так, что если вся строчка имеет Visible = false то она будет действительно невидима, без нужды скрывать вручную еще и все ячейки?

Спасибо!

Комментарии

  • отредактировано 15:23
    BorisM написал: »
    У меня есть таблица, в которой при определенных условиях надо скрывать некоторые строки.

    Я пробовал использовать TableRow.Visible в событии BeforePrint, но это не работает, строки все равно видны. Побившись, обнаружил, что если одновременно выставить Visible = false и для ячеек в этой строке, то тогда строка невидима (выставлдять для самой строки все равно надо, иначе остается пустая строчка).

    Можно ли в будущем релизе сделать так, что если вся строчка имеет Visible = false то она будет действительно невидима, без нужды скрывать вручную еще и все ячейки?

    Спасибо!
    Попробуйте так

    private void Data1_BeforePrint(object sender, EventArgs e)
    {
    if(условие)
    {
    Data1.Visible = false;
    }
    }
  • отредактировано 15:23
    Спасибо, но разве это не скроет весь бэнд? Его-то мне нужно напечатать, как и саму таблицу внутри бэнда. Скрывать надо только некоторые строчки в самой таблице.
    AntoShiK86 написал: »
    Попробуйте так

    private void Data1_BeforePrint(object sender, EventArgs e)
    {
    if(условие)
    {
    Data1.Visible = false;
    }
    }
  • отредактировано 15:23
    BorisM написал: »
    Спасибо, но разве это не скроет весь бэнд? Его-то мне нужно напечатать, как и саму таблицу внутри бэнда. Скрывать надо только некоторые строчки в самой таблице.
    По мне так бенд печатается построчно, вот вы их и скрываете.
  • отредактировано 15:23
    Недщопонимание, видать...

    Я не печатаю данные из таблицы. У меня есть один бенд, который печатается один раз. Внутри бенда помещена одна таблица (компонент репорта table). В таблице два столбца:

    |
    |
    |
    |
    |
    | А.........| 1
    |
    |BAND|
    |
    |
    |
    | B.........| 2
    |
    |
    |
    |
    |
    Как-то так. А и Б -- заголовки, 1 и 2 -- значения (передаются в репорт как параметры). Если значение А или Б <=0, то всю строку надо скрыть. Но бенд и таблицу все равно печатать надо, там много чего другого есть.

    Конечно, можно поместить каждую строку таблицы в свой бенд, но это как-то уж очень через одно место.

    Собственно, вообще не важно, где именно и как выставлять видимость строчки таблицы. Можно выбрать строчку, и в редакторе вручную поставить Visible = false, она все равно будет видна. Надо прятать каждую ячейку индивидуально. Для столбцов Visible работает правильно. Я только мельком взглянул на исходники, и особо не вникал, но у меня есть чувство, что когда строки добавляются в таблицу для отображения, код вообще не сомтрит на Visible. Точнее смотрит, но не строк, а столбцов...

    AntoShiK86 написал: »
    По мне так бенд печатается построчно, вот вы их и скрываете.
  • отредактировано November 2015
    BorisM написал: »
    Недщопонимание, видать...
    Таке сам 5 минут как разбираюсь с этим хозяйством.
    Если дело идет с вокруг Table
    то у вас там как мануалах поди

    Table1.PrintRow(i);
    Table1.PrintColumns();
    Или в обратной последовательности.
    Можно в условие эти строчки обернуть, и он не будет печатать вам их, банально.
    Либо то к чему вы клоните

    Table1.Rows.Visible = false; по условию делать. Где i номер стоки начиная с нуля.

    А еще бы Вы лучше кусочек кода обезличенный приводили в своем вопросе, а то терминология плавает, лучше один раз увидеть.

    Кстати замечу может, я Вас не правильно понял.
    У вас есть Бэнд Data к примеру. Вы удалили с него все компоненты, а добавили только Table и его заполняете это одно
    А если у вас Бэнд Дата и вы в настройках указали датаСоус. Потом в самом Бэнде кинули два компонента Текст, для создания "Таблички аки 2 столбика" это другое. И в этом случае там настройках есть такое фильтр. Если туда записать условие или свой самописный метод, то тоже будет скрывать сроки если значение будет true ( типо IIF ( Data.ID == 13,true,) скроет 13ю строку). Или прям в самом Тексте можно создать условия не сложные, по тому же принципу только Text1.visible=false
  • отредактировано 15:23
    В принципе, да, можно собирать таблицу вручную, но зачем, должно же и так работать.

    Возможность писать репорт в коде это отлично, но в моем случае должно бы хватить визуального дизайнера с установкой Visible для отдельных элементов, зачем усложнять жизнь?

    И да -- есть бенд. Он вообще не подключен ни к какому датасорсу, так как заполняется чисто из параметров репорта. Так что никакой фильтр не сработает.

    Код смогу не раньше понедельника показать, у нас тут праздники, меня на работе не будет :) Попробую примерно...
    Table1.Rows[i].Visible = false;  по условию делать. Где i номер стоки начиная с нуля.
    

    Именно так, с указанием строки по индексу не пробовал не пробовал, но подозреваю, что не сработает.

    У меня сейчас есть tableSummaryData, которая сидит на бенде (без датасорса). В ней одна из строк названа totalAnalyzedRoiRow. В событии BeforePrint таблицы сначала было
    totalAnalyzedRoiRow.Visible = ((double)Report.GetParameterValue("fTotalAnalyzed") != 0.0);
    

    Это не работает, строчка как была видна, так и остается. Работает вот так:
    totalAnalyzedRoiRow.Visible = totalAnalyzedRoiRow[0].Visible = totalAnalyzedRoiRow[1].Visible = ((double)Report.GetParameterValue("fTotalAnalyzed") != 0.0);
    
    AntoShiK86 написал: »
    Таке сам 5 минут как разбираюсь с этим хозяйством.
    Если дело идет с вокруг Table
    то у вас там как мануалах поди

    Table1.PrintRow(i);
    Table1.PrintColumns();
    Или в обратной последовательности.
    Можно в условие эти строчки обернуть, и он не будет печатать вам их, банально.
    Либо то к чему вы клоните

    Table1.Rows.Visible = false; по условию делать. Где i номер стоки начиная с нуля.

    А еще бы Вы лучше кусочек кода обезличенный приводили в своем вопросе, а то терминология плавает, лучше один раз увидеть.

    Кстати замечу может, я Вас не правильно понял.
    У вас есть Бэнд Data к примеру. Вы удалили с него все компоненты, а добавили только Table и его заполняете это одно
    А если у вас Бэнд Дата и вы в настройках указали датаСоус. Потом в самом Бэнде кинули два компонента Текст, для создания "Таблички аки 2 столбика" это другое. И в этом случае там настройках есть такое фильтр. Если туда записать условие или свой самописный метод, то тоже будет скрывать сроки если значение будет true ( типо IIF ( Data.ID == 13,true,) скроет 13ю строку). Или прям в самом Тексте можно создать условия не сложные, по тому же принципу только Text1.visible=false
  • отредактировано 15:23
    BorisM написал: »
    Код смогу не раньше понедельника показать, у нас тут праздники, меня на работе не будет :) Попробую примерно...


    И как у Вас в итоге. ? Получилось ?
  • отредактировано December 2015
    Ну я пока оставил так, как выше указано -- ставлю вручную видимость и ячеек, и всей строки. По-крайней мере результат искомый.
    AntoShiK86 написал: »
    И как у Вас в итоге. ? Получилось ?

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

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