Jump to content

Row Shading in Table


jpmiller

Recommended Posts

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.

VDP WorksheetNEW.pdf

test data.csv.zip

worksheet.png.bc233a52bfb9ce429f1a00cb86d5812b.png

Link to comment
Share on other sites

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:

//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);

[color="Green"]for (var boxNum = -1; boxNum <= numBoxes;boxNum++)
[/color]{
   var row = table.AddRow();

[color="Green"]    if (boxNum <= 0)
   {
       row.type = "Header";
       if (boxNum == 0)
           row.SetContents("Sec#", "Box #", "Records Range", "first rec.", "last rec.");
   }
[/color]    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 };

[color="Green"]        if (boxNum < 0)
           cell.Margins = { Top:0, Bottom:0, Left:0, Right:0 };

       if (boxNum <= 0)
[/color]        {
           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.

Link to comment
Share on other sites

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();

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...