LimeReport Forum

General Category | Основное => Discussion | Обсуждение => Topic started by: maurosanjo on December 02, 2016, 06:22:22 PM

Title: Using Callbacks how to set custom text fields for group header and footer
Post by: maurosanjo on December 02, 2016, 06:22:22 PM
I made a code to study how the callback mechanism works with diferrent band arrangements.

When we have a Data band with a Group Header and with a Group Footer. We put, for instance, 4 fields on data band, that will correspond to columns of each row data. So on LimeReport::CallbackInfo::ColumnCount we set the number of rows = 4.
But if I put text fields in Group Header or Footer using $D{}, the data never gets fetched on getCallbackData.

How can it be done imagining we want different values for each Group Header and Footer fields.

Regards
Title: Re: Using Callbacks how to set custom text fields for group header and footer
Post by: Arin Alex on December 04, 2016, 11:13:44 PM
Can you send me an example ?
Title: Re: Using Callbacks how to set custom text fields for group header and footer
Post by: maurosanjo on December 04, 2016, 11:38:12 PM
Hello Arin,

There is a sample page I was testing on version 1.4. Imagine I want to set a differente value for each field on group header and footer bands, not using DB sources, just the signal and slot mechanism you called callback.

The names of the fields in $D are not used in this signal & slot mechanism right? I was testing different patterns.

Regards

[вложение удалено администратором]
Title: Re: Using Callbacks how to set custom text fields for group header and footer
Post by: Arin Alex on December 05, 2016, 11:37:43 AM
Hi maurosanjo !
The GroupBandHeader and GroupBandFooter bands are designed to create a data grouping
and you must specify a field that will be used for grouping (groupField property of the GroupBandHeader)
when value in that field is changed new group is created.
There is a sample how to use GroupBandHeader and GroupBandFooter. (only for version 1.4 and higher)
If you want simple data header and footer you should use DataHeader and DataFooter bands

[вложение удалено администратором]
Title: Re: Using Callbacks how to set custom text fields for group header and footer
Post by: maurosanjo on December 05, 2016, 12:34:54 PM
Sorry Arin, on my sample I forgot to put a test group field. That is working correctly.

My question is regarding custom data ON the header and footer that are not coming from DataBase data sources. How do I implement the GetCallBackData slot so I can get a request to set the values of the fields on the group header and footer?

See my sample code below, in my sample I sent you, I have four columns of data and 1 field on group header and 2 on group footer. But this way I only get a call for the 4 data fields and the groupField. I don't know if I could make myself clear, please let me know if you did not understand  ;)

Code: [Select]
void ReportsGenerator::LRGetCallbackData2(LimeReport::CallbackInfo info, QVariant &data) {
    switch (info.dataType) {
        case LimeReport::CallbackInfo::RowCount:
            qDebug() << "P2 RowCount - i" << info.index << " - " << info.columnName << " - r " << this->_currentRow;
            data = 4;
            break;
        case LimeReport::CallbackInfo::ColumnCount:
            qDebug() << "P2 ColumnCount - i" << info.index << " - " << info.columnName << " - r " << this->_currentRow;
            data = 4;
            break;
        case LimeReport::CallbackInfo::IsEmpty:
            qDebug() << "P2 IsEmpty - r " << this->_currentRow << " - " << info.columnName;
            data = true; //!ds->first();
            break;
        case LimeReport::CallbackInfo::ColumnHeaderData: {
            switch(info.index) {
                case 0:
                    data = "Name1";
                    break;
                case 1:
                    data = "Value1";
                    break;
                case 2:
                    data = "Name2";
                    break;
                case 3:
                    data = "Value2";
                    break;
            }
            qDebug() << "P2 HeaderData - " << info.index << " - " << data.toString();
            break;
        }
        case LimeReport::CallbackInfo::ColumnData:
            qDebug() << "P2 Requested - i - " << info.index << " - " << info.columnName << " - r " << this->_currentRow;
            if (info.columnName == "SamplesGroup")
                data = "Resultados Gerais";
            else {
                data = "Data";
            }
            break;
        default: break;
    }
}
Title: Re: Using Callbacks how to set custom text fields for group header and footer
Post by: Arin Alex on December 05, 2016, 05:32:13 PM
I think I understand  :)
At first in your code
Quote
Code: [Select]
case LimeReport::CallbackInfo::IsEmpty:
            qDebug() << "P2 IsEmpty - r " << this->_currentRow << " - " << info.columnName;
            data = true; //!ds->first();
            break;
data should be false otherwise callback dataset will be empty

Secondly all fields which you want to use in the report should be described by ColumnHeaderData

Code: [Select]
void ReportsGenerator::LRGetCallbackData2(LimeReport::CallbackInfo info, QVariant &data) {
    switch (info.dataType) {
        case LimeReport::CallbackInfo::RowCount:
            qDebug() << "P2 RowCount - i" << info.index << " - " << info.columnName << " - r " << this->_currentRow;
            data = 4;
            break;
        case LimeReport::CallbackInfo::ColumnCount:
            qDebug() << "P2 ColumnCount - i" << info.index << " - " << info.columnName << " - r " << this->_currentRow;
            data = 5;
            break;
        case LimeReport::CallbackInfo::IsEmpty:
            qDebug() << "P2 IsEmpty - r " << this->_currentRow << " - " << info.columnName;
            data = false; //!ds->first();
            break;
        case LimeReport::CallbackInfo::ColumnHeaderData: {
            switch(info.index) {
                case 0:
                    data = "Name1";
                    break;
                case 1:
                    data = "Value1";
                    break;
                case 2:
                    data = "Name2";
                    break;
                case 3:
                    data = "Value2";
                    break;
                case 4:
                    data = "SamplesGroup";
                    break;
            }
            qDebug() << "P2 HeaderData - " << info.index << " - " << data.toString();
            break;
        }
        case LimeReport::CallbackInfo::ColumnData:
            qDebug() << "P2 Requested - i - " << info.index << " - " << info.columnName << " - r " << this->_currentRow;
            if (info.columnName == "SamplesGroup")
                data = "Resultados Gerais";
            else {
                data = "Data";
            }
            break;
        default: break;
    }
}


Title: Re: Using Callbacks how to set custom text fields for group header and footer
Post by: maurosanjo on December 05, 2016, 07:24:20 PM
Thanks, got it  :)
Title: Re: Using Callbacks how to set custom text fields for group header and footer
Post by: Arin Alex on December 05, 2016, 07:28:01 PM
You are welcome