private void PaintGroupRow(GridGroup gridGroup, DataGridViewRowPrePaintEventArgs e) { Rectangle rect = e.RowBounds; var gradBrush = new LinearGradientBrush(rect, SystemColors.ControlLight, SystemColors.ControlLightLight, LinearGradientMode.Vertical); e.Graphics.FillRectangle(gradBrush, rect); e.Graphics.DrawLine(SystemPens.ButtonShadow, rect.Left, rect.Top, rect.Width, rect.Top); e.Graphics.DrawLine(SystemPens.ButtonHighlight, rect.Left, rect.Top + 1, rect.Width, rect.Top + 1); e.Graphics.DrawLine(SystemPens.Control, rect.Left, rect.Bottom - 1, rect.Width, rect.Bottom - 1); var layoutRectangle = new Rectangle(rect.Left + 25, rect.Top + 9, rect.Width - 35, rect.Height - 10); e.Graphics.DrawString(gridGroup.HeaderText, RowsDefaultCellStyle.Font, Brushes.Black, layoutRectangle); e.Graphics.DrawImage(gridGroup.Collapsed ? Resources.expand : Resources.collapse, rect.Left + 5, rect.Top + 7, 16, 16); //var buttonPosition = new Point((layoutRectangle.X + layoutRectangle.Width) - 150, layoutRectangle.Y); //e.Graphics.DrawImage(Resources.select_all, buttonPosition); //buttonPosition.Offset(18, 0); //e.Graphics.DrawString("All", RowsDefaultCellStyle.Font, Brushes.Black, buttonPosition); //buttonPosition.Offset(64, 0); //e.Graphics.DrawImage(Resources.select_none, buttonPosition); //buttonPosition.Offset(18, 0); //e.Graphics.DrawString("None", RowsDefaultCellStyle.Font, Brushes.Black, buttonPosition); }
public void Bind(Model model, GroupByView groupBy) { var currentSelection = GetSelectedObjects(); SuspendLayout(); _isBinding = true; DataSource = null; Rows.Clear(); _model = model; _gridBinding = new List<GridObject>(); List<IGrouping<string, ModelObject>> groupings; switch (groupBy) { case GroupByView.ObjectType: groupings = _model.Objects.OrderBy(x => x.Type).ThenBy(x => x.Name).GroupBy(modelObject => modelObject.Type) .ToList(); break; case GroupByView.Difference: groupings = _model.Objects.OrderBy(x => x.Type).ThenBy(x => x.Name).GroupBy( modelObject => modelObject.Difference.DisplayValue).ToList(); break; default: groupings = _model.Objects.OrderBy(x => x.Type).ThenBy(x => x.Name).GroupBy(x => "All").ToList(); break; } foreach (var grouping in groupings) { var group = new GridGroup(); group.HeaderText = string.Format("{0} : {1} objects", grouping.Key, grouping.Count()); group.Collapsed = true; _gridBinding.Add(group); foreach (ModelObject modelObject in grouping) { var o = modelObject; var currentValue = currentSelection.FirstOrDefault(x => x.Id == o.Id); var difference = new GridDifference { Include = currentValue == null ? modelObject.Difference.Action != Action.None : currentValue.Include, Object = modelObject, SourceName = modelObject.Name, TargetName = modelObject.Name, Type = modelObject.Type, Action = modelObject.Difference.Action.ToString() }; _gridBinding.Add(difference); } } AutoGenerateColumns = false; DataSource = _gridBinding; CollapseExpandAll(true); _isBinding = false; ResumeLayout(); }