protected internal virtual void OnColumnPropertyChanged(ColumnEventArgs e)
{
if (this.CanRaiseEvents)
{
Rectangle columnHeaderRect;
if (e.Index != -1)
{
columnHeaderRect = this.ColumnHeaderRect(e.Index);
}
else
{
columnHeaderRect = this.ColumnHeaderRect(e.Column);
}
switch (e.EventType)
{
case ColumnEventType.VisibleChanged:
case ColumnEventType.WidthChanged:
{
if (e.EventType == ColumnEventType.VisibleChanged)
{
if (e.Column.Visible && e.Index != this.lastSortedColumn)
{
e.Column.InternalSortOrder = SortOrder.None;
}
if (e.Index == this.FocusedCell.Column && !e.Column.Visible)
{
int index = this.ColumnModel.NextVisibleColumn(e.Index);
if (index == -1)
{
index = this.ColumnModel.PreviousVisibleColumn(e.Index);
}
if (index != -1)
{
this.FocusedCell = new CellPos(this.FocusedCell.Row, index);
}
else
{
this.FocusedCell = CellPos.Empty;
}
}
}
if (columnHeaderRect.X <= 0)
{
this.Invalidate(this.PseudoClientRect);
}
else if (columnHeaderRect.Left <= this.PseudoClientRect.Right)
{
this.Invalidate(new Rectangle(columnHeaderRect.X,
this.PseudoClientRect.Top,
this.PseudoClientRect.Right - columnHeaderRect.X,
this.PseudoClientRect.Height));
}
this.UpdateScrollBars();
break;
}
case ColumnEventType.TextChanged:
case ColumnEventType.StateChanged:
case ColumnEventType.ImageChanged:
case ColumnEventType.HeaderAlignmentChanged:
{
if (columnHeaderRect.IntersectsWith(this.HeaderRectangle))
{
this.Invalidate(columnHeaderRect);
}
break;
}
case ColumnEventType.AlignmentChanged:
case ColumnEventType.RendererChanged:
case ColumnEventType.EnabledChanged:
{
if (e.EventType == ColumnEventType.EnabledChanged)
{
if (e.Index == this.FocusedCell.Column)
{
this.FocusedCell = CellPos.Empty;
}
}
if (columnHeaderRect.IntersectsWith(this.HeaderRectangle))
{
this.Invalidate(new Rectangle(columnHeaderRect.X,
this.PseudoClientRect.Top,
columnHeaderRect.Width,
this.PseudoClientRect.Height));
}
break;
}
}
if (ColumnPropertyChanged != null)
{
ColumnPropertyChanged(e.Column, e);
}
}
}