public void ForceUpdate(WorksheetController dg) { dg.m_LastVisibleColumn=0; dg.m_LastFullyVisibleColumn = 0; this.Clear(); // clear all items if(null==dg.DataTable) return; int actualColumnLeft = 0; int actualColumnRight = dg.m_TableLayout.RowHeaderStyle.Width; this.m_CachedWidth = dg.TableAreaWidth; dg.m_LastFullyVisibleColumn = dg.FirstVisibleColumn; for(int i=dg.FirstVisibleColumn;i<dg.DataTable.DataColumns.ColumnCount && actualColumnLeft<this.m_CachedWidth;i++) { actualColumnLeft = actualColumnRight; Altaxo.Worksheet.ColumnStyle cs = dg.GetDataColumnStyle(i); actualColumnRight = actualColumnLeft+cs.Width; this.Add(new ColumnStyleCacheItem(cs,actualColumnLeft,actualColumnRight)); if(actualColumnLeft<this.m_CachedWidth) dg.m_LastVisibleColumn = i; if(actualColumnRight<=this.m_CachedWidth) dg.m_LastFullyVisibleColumn = i; } }
/// <summary> /// Retrieves the column number clicked onto /// </summary> /// <param name="dg">The parent data grid</param> /// <param name="mouseCoord">The coordinates of the mouse click.</param> /// <param name="cellRect">The function sets the x-properties (X and Width) of the cell rectangle.</param> /// <returns>Either -1 when clicked on the row header area, column number when clicked in the column range, or int.MinValue when clicked outside of all.</returns> public static int GetColumnNumber(WorksheetController dg, Point mouseCoord, ref Rectangle cellRect) { int firstVisibleColumn = dg.FirstVisibleColumn; int actualColumnRight = dg.WorksheetLayout.RowHeaderStyle.Width; int columnCount = dg.DataTable.DataColumns.ColumnCount; if(mouseCoord.X<actualColumnRight) { cellRect.X=0; cellRect.Width=actualColumnRight; return -1; } for(int i=firstVisibleColumn;i<columnCount;i++) { cellRect.X=actualColumnRight; Altaxo.Worksheet.ColumnStyle cs = dg.GetDataColumnStyle(i); actualColumnRight += cs.Width; if(actualColumnRight>mouseCoord.X) { cellRect.Width = cs.Width; return i; } } // end for return int.MinValue; }