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;
        }
      }
예제 #2
0
    /// <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;
    }