MarcomCentral (PTI) and FusionPro User Communities

MarcomCentral (PTI) and FusionPro User Communities (http://forums.pti.com/index.php)
-   Tables & Charts (http://forums.pti.com/forumdisplay.php?f=36)
-   -   Row Shading in Table (http://forums.pti.com/showthread.php?t=5351)

jpmiller May 8th, 2019 12:05 PM

Row Shading in Table
 
3 Attachment(s)
Hello,

I am trying to set my row shading to be every two rows. The problem I am having is that the first row starts shaded then the every two row pattern starts.
How do I get the shading to be correct?

This is the bit of code I am using to set the Shading Pattern:

for (var c = 0; c < numColumns; c++)
{
var cell = row.Cells[c];
cell.HAlign = "Center";
cell.SetBorders("Thin", "Black", "Top", "Bottom", "Left", "Right");
cell.Margins = { Top:45, Bottom:45, Left:20, Right:20 };

if (boxNum == 0)
{
cell.TextColor = "White";
cell.ShadeColor = "Black";
cell.ShadePct = 100;
}
}
}

table.ShadingColor1 = "Black";
table.ShadingPct1 = 30;
table.ShadingRepeat1 = 2;
table.ShadingColor2 = "White";
table.ShadingRepeat2 = 2;
table.ShadingType = "ByRow";

return table.MakeTags();

I have also included a screenshot.
Thank you for your help.

Dan Korn May 10th, 2019 01:44 PM

Re: Row Shading in Table
 
The "every two row" pattern does work, starting from the very first row of the table. But that first row is actually the header row. So if you want to start your shading repeats at the first non-header row, then you need to have the same number of headers as your repeat. So in this case, since you're repeating the shading every two rows, you need two (or a multiple of two) header rows.

I modified your rule to add another header row, with no content or margins, which is basically invisible, but still counts as a row for this purpose of shading repeats:
Code:

//Be sure to check "Treat returned strings as tagged text"//
//This will create a table filled with record rang dependenat upon (var recordsPerBox)//
//Creat this as a textRule
//Include OnJobStart rule "OnjobStart_not all records""

var recordsPerBox = 2500; // 50
var nameFieldName = "first"; //"Lname"

var table = new FPTable;
var numColumns = 13;
for (var c = 0; c < numColumns; c++)
{
    var width = 2500;
    if (c == 0)
        width = 3500;
    if (c == 1)
        width = 3500;
    if (c == 2)
        width = 6500;
    if (c == 3)
        width = 11500;
    if (c == 4)
        width = 11500;   
       
    table.AddColumn(width);
}

var data = new ExternalDataFileEx(PrimaryInputFile());
var totalRecs = data.recordCount;
var numBoxes = Math.ceil(totalRecs / recordsPerBox);

for (var boxNum = -1; boxNum <= numBoxes;boxNum++)
{
    var row = table.AddRow();

    if (boxNum <= 0)
    {
        row.type = "Header";
        if (boxNum == 0)
            row.SetContents("Sec#", "Box #", "Records Range", "first rec.", "last rec.");
    }
    else
    {
        var boxStartRec = (boxNum - 1) * recordsPerBox + 1;
        var boxEndRec = Math.min(boxNum * recordsPerBox, totalRecs);
        var boxStartName = (data.GetFieldValue(boxStartRec, nameFieldName));
        var boxEndName = (data.GetFieldValue(boxEndRec, nameFieldName));

       
        row.Cells[0].Content = "";
        row.Cells[1].Content = boxNum + "/" + numBoxes;
        row.Cells[2].Content = boxStartRec + "-" + boxEndRec;
        row.Cells[3].Content = boxStartName;
        row.Cells[4].Content = boxEndName;
    }

    for (var c = 0; c < numColumns; c++)
    {
        var cell = row.Cells[c];
        cell.HAlign = "Center";
        cell.SetBorders("Thin", "Black", "Top", "Bottom", "Left", "Right");
        cell.Margins = { Top:45, Bottom:45, Left:20, Right:20 };

        if (boxNum < 0)
            cell.Margins = { Top:0, Bottom:0, Left:0, Right:0 };
       
        if (boxNum <= 0)
        {
            cell.TextColor = "White";
            cell.ShadeColor = "Black";
            cell.ShadePct = 100;
        }
    }
}

table.ShadingColor1 = "Black";
table.ShadingPct1 = 30;
table.ShadingRepeat1 = 2;
table.ShadingColor2 = "White";
table.ShadingRepeat2 = 2;
table.ShadingType = "ByRow";

return table.MakeTags();

I've highlighted the lines I changed or added in green.

jpmiller May 13th, 2019 04:57 AM

Re: Row Shading in Table
 
Thank you very much for your solution.
I did end up with another solution.
I moved the Header Shading up to the Header Declaration section.


//Be sure to check "Treat returned strings as tagged text"//
//This will create a table filled with record rang dependenat upon (var recordsPerBox)//
//Creat this as a textRule
//Include OnJobStart rule "OnjobStart_not all records""


var recordsPerBox = 2500;
var nameFieldName = "first";

var table = new FPTable;
var numColumns = 13;
for (var c = 0; c < numColumns; c++)
{
var width = 2500;
if (c == 0)
width = 3500;
if (c == 1)
width = 3500;
if (c == 2)
width = 6500;
if (c == 3)
width = 11500;
if (c == 4)
width = 11500;

table.AddColumn(width);
}

var data = new ExternalDataFileEx(PrimaryInputFile());
var totalRecs = data.recordCount;
var numBoxes = Math.ceil(totalRecs / recordsPerBox);

for (var boxNum = 0; boxNum <= numBoxes;boxNum++)
{
var row = table.AddRow();

if (boxNum == 0)
{
//row.type = row.Header;
//new solution - HEADER DECLARATION
table.Rows[0].Type = "Header"
table.Rows[0].Cells[0].ShadeColor = "Black";
table.Rows[0].Cells[0].ShadePct = 100;
table.Rows[0].Cells[0].TextColor = "White";

table.Rows[0].CopyCells (0,1,2,3,4,5,6,7,8,9,10,11,12);
row.SetContents("Sec#", "Box #", "Records Range", "first rec.", "last rec.");

}
else
{
var boxStartRec = (boxNum - 1) * recordsPerBox + 1;
var boxEndRec = Math.min(boxNum * recordsPerBox, totalRecs);
var boxStartName = (data.GetFieldValue(boxStartRec, nameFieldName));
var boxEndName = (data.GetFieldValue(boxEndRec, nameFieldName));


row.Cells[0].Content = "";
row.Cells[1].Content = boxNum + "/" + numBoxes;
row.Cells[2].Content = boxStartRec + "-" + boxEndRec;
row.Cells[3].Content = boxStartName;
row.Cells[4].Content = boxEndName;
}

for (var c = 0; c < numColumns; c++)
{
var cell = row.Cells[c];
cell.HAlign = "Center";
cell.SetBorders("Thin", "Black", "Top", "Bottom", "Left", "Right");
cell.Margins = { Top:45, Bottom:45, Left:20, Right:20 };

if (boxNum == 0)
{
//Moved to Header Declaration
//cell.TextColor = "White";
//cell.ShadeColor = "Black";
//cell.ShadePct = 100;

}
}
}

table.ShadingColor1 = "Black";
table.ShadingPct1 = 30;
table.ShadingRepeat1 = 2;
table.ShadingColor2 = "White";
table.ShadingRepeat2 = 2;
table.ShadingType = "ByRow";

return table.MakeTags();


All times are GMT -7. The time now is 01:29 PM.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
(c) 2011, PTI Marketing Technologies™, Inc.