FillDataTable
獲得DataTable後程序調用控件的 FillDataTable方法向控件填充數據。這個方法的代碼如下
/// <summary>
/// 根據一個DataTable 填充網格
/// </summary>
/// <param name="table">數據表對象</param>
public void FillDataTable( DataTable table )
{
if( table == null )
throw new ArgumentNullException("table");
myDocument.Clear();
CellRow row = new CellRow();
myDocument.Add( row );
foreach( DataColumn col in table.Columns )
{
row.Add( col.ColumnName );
}
foreach( DataRow drow in table.Rows )
{
row = new CellRow();
foreach( DataColumn col in table.Columns )
{
object v = drow[ col ] ;
string txt = "";
if( v == null || DBNull.Value.Equals( v ))
txt = "[NULL]";
else
txt = Convert.ToString( v );
row.Add( txt );
}
myDocument.Add( row );
}
using( System.Drawing.Graphics g = this.CreateGraphics())
{
this.RefreshSize( g );
this.Invalidate();
}
}
進入FillDataTable方法可以看到 程序是根據DataTable填充網格文檔對象 myDocument 。程序中實現了由Cell , CellRow 和 CellDocument 三種類型組成的網格文檔對象。
大家可以看看這三個類的代碼,它們 是相當簡單的。Cell 類定義了網格單元格對象,包括單元格顯示的文本,位置和大小等信息 。CellRow類定義了表格行對象,它本身也是單元格列表,可以添加單元格對象。 CellDocument定義了表格文檔對象,它本身是表格行列表,可以添加表格行,還提供Cells屬 性返回文檔中所有的單元格對象組成的數組。
我們回到FillDataTable 函數,首先是 清空文檔,然後遍歷DataTable的標題欄信息,生成網格文檔的第一行單元格,然後遍歷 DataTable所有的數據行對象,對每一個數據行新增一個表格行對象,然後添加到 myDocument 中。