RefreshSize
程序使用一個DataTable填充網格文檔後,需要 調用 RefreshSize 進行內容事先排版,為顯示文檔內容做准備。這個方法的代碼為
/// <summary>
/// 計算單元格大小,進行內容排版
/// </summary>
/// <param name="g">計算文本大小使用的圖形 繪制對象</param>
public void RefreshSize( System.Drawing.Graphics g )
{
ArrayList cells = new ArrayList();
System.Drawing.Size VIEwSize = Size.Empty ;
int LeftCount = 0 ;
for( int iCount = 0 ; iCount < 1000 ; iCount ++ )
{
// 遍歷所有的表格列,獲得 指定的列的單元格對象
// 此處允許最大的表格列有1000列
cells.Clear();
for( int RowIndex = 0 ; RowIndex < myDocument.Count ; RowIndex ++ )
{
CellRow row = myDocument[ RowIndex ] ;
if( iCount < row.Count )
{
Cell cell = row[ iCount ] ;
// 設置單元格的位置
cell.intLeft = LeftCount ;
cell.intTop = RowIndex * this.RowHeight ;
cells.Add( cell );
}
}
if( cells.Count == 0 )
break;
// 計算當前列的單元格的最大寬度
int MaxWidth = 40 ;
foreach( Cell cell in cells )
{
string txt = cell.Text ;
if( txt != null && txt.Length > 0 )
{
System.Drawing.SizeF size = g.MeasureString(
txt ,
this.Font ,
1000 ,
System.Drawing.StringFormat.GenericDefault );
if( MaxWidth < ( int ) size.Width )
MaxWidth = ( int ) size.Width ;
}
}
MaxWidth += 10 ;
// 設置單元格的大小
foreach( Cell cell in cells )
{
cell.intWidth = MaxWidth ;
cell.intHeight = this.RowHeight ;
if( cell.Left + cell.Width > VIEwSize.Width )
VIEwSize.Width = cell.Left + cell.Width ;
if( cell.Top + cell.Height > VIEwSize.Height )
VIEwSize.Height = cell.Top + cell.Height ;
}
LeftCount += MaxWidth ;
}
VIEwSize.Width += 10 ;
VIEwSize.Height += 10 ;
if( this.AutoScrollMinSize.Equals( VIEwSize ) == false )
{
this.AutoScrollMinSize = VIEwSize ;
this.Invalidate();
}
}//public void RefreshSize( System.Drawing.Graphics g )