jpmiller Posted May 8, 2019 Share Posted May 8, 2019 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.pdftest data.csv.zip Quote Link to comment Share on other sites More sharing options...
Dan Korn Posted May 10, 2019 Share Posted May 10, 2019 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. Quote Link to comment Share on other sites More sharing options...
jpmiller Posted May 13, 2019 Author Share Posted May 13, 2019 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(); Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.