4 Answers, 1 is accepted
0
Hello ,
Thank you for writing.
You can use the PrintCellPaint event and add similar code: Events and Customization.
Let me know if I can assist you further.
Regards,
Dimitar
Telerik
Thank you for writing.
You can use the PrintCellPaint event and add similar code: Events and Customization.
Let me know if I can assist you further.
Regards,
Dimitar
Telerik
Check out the Windows Forms project converter, which aids the conversion process from standard Windows Forms applications written in C# or VB to Telerik UI for WinForms.For more information check out this blog post and share your thoughts.
0
Chosi
Top achievements
Rank 1
answered on 28 Jun 2016, 06:55 AM
Here is my RowPaint event:
01.private void grid_RowPaint(object sender, GridViewRowPaintEventArgs e)02. {03. if (e.Row is GridDataRowElement)04. {05. GridDataRowElement rowElement = e.Row as GridDataRowElement;06. 07. int start = (int)e.Row.RowInfo.Cells["StartCell"].Value;08. int end = (int)e.Row.RowInfo.Cells["EndCell"].Value;09. Color color = (Color)e.Row.RowInfo.Cells["Color"].Value;10. 11. if (end == 0)12. return;13. 14. GridDataCellElement startCell = GetCell(rowElement, start);15. GridDataCellElement endCell = GetCell(rowElement, end);16. 17. if (startCell == null || endCell == null)18. {19. return;20. }21. 22. int left = startCell.PointToControl(startCell.Bounds.Location).X + (startCell.TableElement.CellSpacing * startCell.ColumnIndex);23. int right = endCell.PointToControl(new Point(endCell.Bounds.Right, endCell.Bounds.Bottom)).X;24. 25. if (grid.RightToLeft == System.Windows.Forms.RightToLeft.Yes)26. {27. left = endCell.PointToControl(startCell.Bounds.Location).X + (endCell.TableElement.CellSpacing * startCell.ColumnIndex) - (int)e.Graphics.Transform.OffsetX;28. right = startCell.PointToControl(new Point(startCell.Bounds.Right, startCell.Bounds.Bottom)).X - (int)e.Graphics.Transform.OffsetX;29. }30. 31. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;32. e.Graphics.SetClip(rowElement.ScrollableColumns.BoundingRectangle);33. 34. using (RoundRectShape shape = new RoundRectShape(5))35. {36. var rect = new RectangleF(left + 10, 5, (right - left) - 15, e.Row.Size.Height - 10);37. 38. using (GraphicsPath path = shape.CreatePath(rect))39. using (Brush brush = new SolidBrush(color))40. using (Pen pen = new Pen(Color.FromArgb(color.A, (int)(color.R * 0.5), (int)(color.G * 0.5), (int)(color.B * 0.5)), 2))41. {42. e.Graphics.FillPath(brush, path);43. e.Graphics.DrawPath(pen, path);44. }45. }46. }47. }48. 49.private GridDataCellElement GetCell(GridRowElement rowElement, int phaseId)50. {51. foreach (GridCellElement cell in rowElement.VisualCells)52. {53. if (cell.ColumnInfo != null && cell.ColumnInfo.Name == phaseId.ToString())54. {55. return cell as GridDataCellElement;56. }57. }58. return null;59. }How should I use this code in PrintCellPaint event?
0
Chosi
Top achievements
Rank 1
answered on 28 Jun 2016, 07:01 AM
As you can see, I have a line as bellow:
GridDataRowElement rowElement = e.Row as GridDataRowElement;But I cannot use this code in PrintCellPrint event.
0
Hello ,
Thank you for writing back.
You do not need the row element in this case. You need to know where the shape starts and ends. For example:
I hope this will be useful.
Regards,
Dimitar
Telerik
Thank you for writing back.
You do not need the row element in this case. You need to know where the shape starts and ends. For example:
private void RadGridView1_PrintCellPaint(object sender, PrintCellPaintEventArgs e){ GridViewDataRowInfo dataRow = e.Row as GridViewDataRowInfo; if (dataRow != null) { bool isStartCell = e.Column.Index == 0; bool isEndCell = e.Column.Index == 4; bool isMiddle = e.Column.Index > 0 && e.Column.Index < 4; var color = Color.Red; if (isStartCell) { using (RoundRectShape shape = new RoundRectShape(5, true, true, false, false)) { var rect = new Rectangle(e.CellRect.X + 3, e.CellRect.Y + 3, e.CellRect.Width - 3, e.CellRect.Height - 6); using (GraphicsPath path = shape.CreatePath(rect)) using (Brush brush = new SolidBrush(color)) using (Pen pen = new Pen(Color.FromArgb(color.A, (int)(color.R * 0.5), (int)(color.G * 0.5), (int)(color.B * 0.5)), 2)) { e.Graphics.FillPath(brush, path); e.Graphics.DrawPath(pen, path); } } } if (isEndCell) { using (RoundRectShape shape = new RoundRectShape(5, false, false, true, true)) { var rect = new Rectangle(e.CellRect.X , e.CellRect.Y + 3, e.CellRect.Width - 3, e.CellRect.Height - 6); using (GraphicsPath path = shape.CreatePath(rect)) using (Brush brush = new SolidBrush(color)) using (Pen pen = new Pen(Color.FromArgb(color.A, (int)(color.R * 0.5), (int)(color.G * 0.5), (int)(color.B * 0.5)), 2)) { e.Graphics.FillPath(brush, path); e.Graphics.DrawPath(pen, path); e.Graphics.FillRectangle(new SolidBrush(color),e.CellRect.X -2, e.CellRect.Y + 4,4,e.CellRect.Height - 8); } } } if (isMiddle) { using (RoundRectShape shape = new RoundRectShape(5, false, false, false, false)) { var rect = new Rectangle(e.CellRect.X -1, e.CellRect.Y + 3, e.CellRect.Width+2, e.CellRect.Height - 6); using (GraphicsPath path = shape.CreatePath(rect)) using (Brush brush = new SolidBrush(color)) using (Pen pen = new Pen(Color.FromArgb(color.A, (int)(color.R * 0.5), (int)(color.G * 0.5), (int)(color.B * 0.5)), 2)) { e.Graphics.FillPath(brush, path); e.Graphics.DrawLine(pen, new Point(e.CellRect.X, e.CellRect.Y + 3), new Point(e.CellRect.X + e.CellRect.Width, e.CellRect.Y+3)); e.Graphics.DrawLine(pen, new Point(e.CellRect.X, e.CellRect.Y +e.CellRect.Height - 3), new Point(e.CellRect.X + e.CellRect.Width, e.CellRect.Y+ e.CellRect.Height-3)); } } } }}I hope this will be useful.
Regards,
Dimitar
Telerik
Check out the Windows Forms project converter, which aids the conversion process from standard Windows Forms applications written in C# or VB to Telerik UI for WinForms.For more information check out this blog post and share your thoughts.
