DataGrid 风格管理类测试版源码
众所周知,WINForm 的 DataGrid 组件的功能强大而且灵活,作为一个数据库程序离开它可不行,但是dataGrid在设计期间采用“套用式样”的方式设计表格的外观并不够灵活,那有没有办法统一管理表格风格呢?答案是有。
作为数据表格的应用最重要的应该不是风格的颜色搭配,而是字段属性的格式化,要格式化每一列的数据显示值,比如说:dataGrid的记录集如果有个“日期时间”字段的话,就会发现,默认的话其实它只显示了日期部分,而时间被Format掉了,这样的话不能满足应用的需求。很多新手朋友也发过帖子询问如何显示出时间,本人也是属于新手行列,查阅了MSDN后编写了一个管理dataGrid 格式列和风格的类,它可以实现管理‘列宽、字体、标题名、格式类型、是否隐藏、行选、行只读、列只读’的基本功能。
先大致讲一下格式化列的原理。列的格式由DataGridTextBoxColumn的Format属性进行控制,Format 属性可以支持日期、货币、数值、文本等格式字符,具体信息可以参考MSDN:http://msdn.microsoft.com/library/CHS/cpref/html/frlrfSystemWindowsFormsDataGridTextBoxColumnClassFormatTopic.asp?frame=true。
这里演示格式化“日期时间”,代码:
DataGridTextBoxColumn gridColumn = DataGridTextBoxColumn();
gridColumn.Format=System.String.Format("yyyy-MM-dd hh:mm:ss",gridColumn.TextBox);
类的基本流程:
现在我把类的源码贴上面,我不保证代码的一些做法是否合理与正确,仅供参考:
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Drawing;
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
namespace Grid.Service
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 格式化字符串
/// </summary>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public enum FormatIndex
{
Text = 0x0, //文本
Boolean, //是/否(钩选框)
Money, //货币(¥#0.00)
Numeric, //数值格式(#0.00)
RealNumber, //实数(0.000000)
LongDateTime, //长日期时间(yyyy年mm月dd日 hh:mm:ss)
DateTime, //日期时间(yyyy-mm-dd hh:mm:ss)
LongDate, //长日期(yyyy-mm-dd)
ShortDate, //短日期(yy-mm-dd)
Time //时间(hh:mm:ss)
};
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// StyleManager 的摘要说明。
/// DataGrid 的属性管理类
/// </summary>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public class StyleManager
{
public static int lastSelectIndex = -1;
private DataGrid _dataGrid =null;
private DataTable _dataTable =null;
private bool _allowSelectedRow =false;
private int[] ReadonlyRows = null;
private bool isReadonlyRow = false;
private bool _dataGridReadonly = false;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public StyleManager(DataGrid dataGrid)
{
_dataGrid = dataGrid;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public StyleManager()
{;}
[Category("Action")]
[Description("可操作的数据表格")]
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public DataGrid @DataGrid
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{return _dataGrid;}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{
_dataGrid=value;
this._dataGrid.CurrentCellChanged -= new System.EventHandler(this.dataGrid_CurrentCellChanged);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(this._allowSelectedRow)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(_dataGrid!=null)
{
//修改事件
this._dataGrid.CurrentCellChanged += new System.EventHandler(this.dataGrid_CurrentCellChanged);
}
}
}
}
[Category("Data")]
[Description("要与数据表格绑定的数据源")]
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public DataTable DataSource
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{return _dataTable;}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{_dataTable =(value as DataTable);}
}
[Category("Appearance")]
[Description("获取当前的表格风格")]
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public DataGridTableStyle CurrentTableStyle
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{return GetGridTableStyle();}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 允许行选择模式
/// </summary>
[Category("Behavior")]
[Description("允许行选择模式")]
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool AllowSelectedRow
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{return _allowSelectedRow;}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{
_allowSelectedRow =value;
this._dataGrid.CurrentCellChanged -= new System.EventHandler(this.dataGrid_CurrentCellChanged);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(value)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(_dataGrid!=null)
{
//修改事件
this._dataGrid.CurrentCellChanged += new System.EventHandler(this.dataGrid_CurrentCellChanged);
}
}
}
}
[Category("Behavior")]
[Description("表格只读,也可隐藏底部的新增行")]
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool ReadOnly
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{return _dataGridReadonly;}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{_dataGridReadonly = value;}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 行选择事件
/// </summary>
/// <param name="sender">对象</param>
/// <param name="e">事件参数</param>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private void dataGrid_CurrentCellChanged(object sender, System.EventArgs e)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(this.DataSource!=null)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
this._dataGrid.Select(this._dataGrid.CurrentRowIndex);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(StyleManager.lastSelectIndex!=-1)
{
this._dataGrid.UnSelect(StyleManager.lastSelectIndex);
}
StyleManager.lastSelectIndex = this._dataGrid.CurrentRowIndex;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{;}
}
//锁定表格行的算法
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(isReadonlyRow&&this.ReadonlyRows!=null)
{
this._dataGrid.ReadOnly = false;
if(this.ReadonlyRows.Length>0)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(int i=0;i<ReadonlyRows.Length;i++)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(this._dataGrid.CurrentRowIndex==ReadonlyRows[i])
{
this._dataGrid.ReadOnly = true;
break;
}
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(_dataGridReadonly)
{
this._dataGrid.ReadOnly = true;
return;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列头风格
/// </summary>
/// <param name="HeaderFont">字体</param>
/// <param name="HeaderFontColor">文字颜色</param>
/// <returns>是否成功</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetHeader(Font HeaderFont,Color HeaderFontColor)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
DataGridTableStyle currGTS = GetGridTableStyle();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(currGTS==null)
{
throw new Exception("初始化表风格出错!");
}
currGTS.HeaderFont = HeaderFont;
currGTS.HeaderForeColor = HeaderFontColor;
return true;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{
return false;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列头风格,默认黑色字体颜色
/// </summary>
/// <param name="HeaderFont">字体</param>
/// <returns>是否成功</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetHeader(Font HeaderFont)
{
return SetHeader(HeaderFont,System.Drawing.Color.Black);
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置表格风格
/// </summary>
/// <param name="CaptionText">标题文本</param>
/// <param name="CaptionVisible">标题可视</param>
/// <param name="RowHeaderVisible">行头可视</param>
/// <returns>是否成功</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetGrid(string CaptionText,bool CaptionVisible,bool RowHeaderVisible)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
DataGridTableStyle currGTS = GetGridTableStyle();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(currGTS==null)
{
throw new Exception("初始化表风格出错!");
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(this._dataGrid==null)
{
throw new Exception("无可操作的表格对象!");
}
this._dataGrid.CaptionText = CaptionText;
this._dataGrid.CaptionVisible = CaptionVisible;
currGTS.RowHeadersVisible = RowHeaderVisible;
return true;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{
return false;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 根据数据类型获取列类型
/// </summary>
/// <param name="tp">数据类型</param>
/// <returns></returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private int getDataGridExColumn(Type tp)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(tp==System.Type.GetType("System.Boolean"))
{
return 2;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else if(tp==System.Type.GetType("System.DateTime"))
{
return 6;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else if(tp==System.Type.GetType("System.Decimal"))
{
return 1;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else if(tp==System.Type.GetType("System.Single")||tp==System.Type.GetType("System.Double"))
{
return 3;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else
{
return 0;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 获取默认默认风格
/// </summary>
/// <returns>表风格</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private DataGridTableStyle GetGridTableStyle()
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
if (_dataGrid.TableStyles.Count<=0&&_dataTable==null)
throw new ArgumentNullException("数据源为空!");
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if((_dataGrid.DataSource as DataTable)!=_dataTable)
{
_dataGrid.DataSource = _dataTable;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(_dataGrid.TableStyles.Count<=0)
{
DataGridTableStyle style = new DataGridTableStyle();
style.MappingName = _dataTable.TableName;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
foreach(DataColumn column in _dataTable.Columns)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(column.DataType==System.Type.GetType("System.Boolean"))
{
DataGridBoolColumn gridColumn = new DataGridBoolColumn();
gridColumn.TrueValue = true;
gridColumn.FalseValue = false;
gridColumn.MappingName = column.ColumnName;
gridColumn.HeaderText = column.ColumnName;
gridColumn.Width = _dataGrid.PreferredColumnWidth;
style.GridColumnStyles.Add(gridColumn);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else
{
DataGridTextBoxColumn gridColumn = new DataGridTextBoxColumn();
gridColumn.MappingName = column.ColumnName;
gridColumn.HeaderText = column.ColumnName;
gridColumn.Width = _dataGrid.PreferredColumnWidth;
gridColumn.NullText = "";
style.GridColumnStyles.Add(gridColumn);
}
}
_dataGrid.TableStyles.Clear();
_dataGrid.TableStyles.Add(style);
}
return _dataGrid.TableStyles[0];
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{
return null;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private bool isBoolColumn(string ColumnName)
{
return (_dataTable.Columns[ColumnName].DataType==System.Type.GetType("System.Boolean"));
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private int getColumnIndex(DataGridTableStyle DGTS , string columName)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(int i=0;i<DGTS.GridColumnStyles.Count;i++)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(DGTS.GridColumnStyles[i].HeaderText.ToString().Trim()==columName.ToString().Trim())
{
return i;
}
}
return -1;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置只读的行
/// </summary>
/// <param name="rowIndexs">行索引数组</param>
/// <param name="Readonly">是否只读</param>
/// <returns>是否成功</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetReadOnlyRows(int[] rowIndexs,bool Readonly)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
this.isReadonlyRow = Readonly;
this.ReadonlyRows = rowIndexs;
return true;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{
return false;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列只读属性
/// </summary>
/// <param name="columnIndexs">列索引数组</param>
/// <param name="Readonly">只读属性</param>
/// <returns>是否处理成功</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetReadOnlyColumns(int[] columnIndexs,bool Readonly)
{
//获取表风格
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
DataGridTableStyle currGTS = GetGridTableStyle();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(currGTS==null)
{
throw new Exception("初始化表风格出错!");
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(columnIndexs==null||columnIndexs.Length<=0)
{
throw new ArgumentOutOfRangeException("只读索引超出范围!");
}
DataGridColumnStyle GCS;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(int i=0;i<columnIndexs.Length;i++)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(columnIndexs[i]<0&&columnIndexs[i]>currGTS.GridColumnStyles.Count-1)
{
throw new ArgumentOutOfRangeException("索引超出范围!");
}
GCS = currGTS.GridColumnStyles[columnIndexs[i]];
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(GCS is DataGridBoolColumn)
{
(GCS as DataGridBoolColumn).ReadOnly = Readonly;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else if(GCS is DataGridTextBoxColumn)
{
(GCS as DataGridTextBoxColumn).ReadOnly = Readonly;
}
}
return true;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{return false;}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列只读属性
/// </summary>
/// <param name="columnNames">列名称数组</param>
/// <param name="Readonly">只读属性</param>
/// <returns>是否处理成功</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetReadOnlyColumns(string[] columnNames,bool Readonly)
{
//获取表风格
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
DataGridTableStyle currGTS = GetGridTableStyle();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(currGTS==null)
{
throw new Exception("初始化表风格出错!");
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(columnNames==null||columnNames.Length<=0)
{
throw new ArgumentOutOfRangeException("只读索引超出范围!");
}
DataGridColumnStyle GCS;
int columnIndex =-1;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(int i=0;i<columnNames.Length;i++)
{
columnIndex = getColumnIndex(currGTS,columnNames[i]);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(columnIndex==-1)
{
throw new Exception("列名称为空或者无效!");
}
GCS = currGTS.GridColumnStyles[columnNames[i]];
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(GCS is DataGridBoolColumn)
{
(GCS as DataGridBoolColumn).ReadOnly = Readonly;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else if(GCS is DataGridTextBoxColumn)
{
(GCS as DataGridTextBoxColumn).ReadOnly = Readonly;
}
}
return true;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{return false;}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列属性
/// </summary>
/// <param name="columnIndex">列索引值</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <param name="Format">列格式</param>
/// <param name="Align">靠齐方式</param>
/// <param name="Visible">是否可见</param>
/// <returns>完成状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetColumn(int columnIndex,int Width,string Title,FormatIndex Format,HorizontalAlignment Align,bool Visible)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
//获取表风格
DataGridTableStyle currGTS = GetGridTableStyle();
string MappingName= null;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(currGTS==null)
{
throw new Exception("初始化表风格出错!");
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(columnIndex<0&&columnIndex>currGTS.GridColumnStyles.Count-1)
{
throw new ArgumentOutOfRangeException("索引超出范围!");
}
//处理参数
Width = (Math.Abs(Width));
Title = (Title == null ? "" : Title);
Format = ((object)Format == null ? FormatIndex.Text : Format);
Align = ((object)Align == null ? HorizontalAlignment.Left : Align);
MappingName = currGTS.GridColumnStyles[columnIndex].MappingName;
DataGridColumnStyle GCS = currGTS.GridColumnStyles[columnIndex];
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(GCS is DataGridTextBoxColumn)
{
DataGridTextBoxColumn gridColumn = (GCS as DataGridTextBoxColumn);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
switch((int)Format)
{
case 2:
gridColumn.Format = "C";
break;
case 3:
gridColumn.Format = "N";
break;
case 5:
gridColumn.Format=System.String.Format("yyyy年MM月dd日 hh:mm:ss",gridColumn.TextBox);
break;
case 6:
gridColumn.Format=System.String.Format("yyyy-MM-dd hh:mm:ss",gridColumn.TextBox);
break;
case 7:
gridColumn.Format=System.String.Format("yyyy-MM-dd",gridColumn.TextBox);
break;
case 8:
gridColumn.Format=System.String.Format("yy-MM-dd",gridColumn.TextBox);
break;
case 9:
gridColumn.Format= System.String.Format("hh:mm:ss",gridColumn.TextBox);
break;
default:
gridColumn.Format = "";
break;
}
gridColumn.Width = Width;
gridColumn.MappingName = MappingName;
gridColumn.HeaderText = (Title.ToString()==""||Title==null ? MappingName : Title.ToString());
gridColumn.Alignment = Align;
gridColumn.NullText = "";
}
//隐藏字段
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(!Visible)
{
GCS.Width =0;
GCS.HeaderText ="";
}
return true;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{
return false;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列属性,默认可见
/// </summary>
/// <param name="columnIndex">列索引值</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <param name="Format">列格式</param>
/// <param name="Align">靠齐方式</param>
/// <returns>完成状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetColumn(int columnIndex,int Width,string Title,FormatIndex Format,HorizontalAlignment Align)
{
return SetColumn(columnIndex,Width,Title,Format,Align,true);
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列属性,默认可见,默认靠齐居左
/// </summary>
/// <param name="columnIndex">列索引值</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <param name="Format">列格式</param>
/// <returns>完成状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetColumn(int columnIndex,int Width,string Title,FormatIndex Format)
{
return SetColumn(columnIndex,Width,Title,Format,HorizontalAlignment.Left,true);
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列属性,默认可见,默认靠齐居左,默认文本格式
/// </summary>
/// <param name="columnIndex">列索引值</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <returns>完成状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetColumn(int columnIndex,int Width,string Title)
{
return SetColumn(columnIndex,Width,Title,FormatIndex.Text,HorizontalAlignment.Left,true);
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列属性,默认可见,默认靠齐居左,默认文本格式,默认标题为影射名
/// </summary>
/// <param name="columnIndex">列索引值</param>
/// <param name="Width">宽度</param>
/// <returns>完成状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetColumn(int columnIndex,int Width)
{
return SetColumn(columnIndex,Width,"",FormatIndex.Text,HorizontalAlignment.Left,true);
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列属性
/// </summary>
/// <param name="columnName">列名称</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <param name="Format">列格式</param>
/// <param name="Align">靠齐方式</param>
/// <param name="Visible">是否可见</param>
/// <returns>完成状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetColumn(string columnName,int Width,string Title,FormatIndex Format,HorizontalAlignment Align,bool Visible)
{
DataGridTableStyle currGTS = GetGridTableStyle();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(currGTS==null)
{
throw new Exception("初始化表风格出错!");
}
int columnIndex = getColumnIndex(currGTS,columnName);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(columnIndex==-1)
{
throw new Exception("列名称为空或者无效!");
}
return SetColumn(columnIndex,Width,Title,Format,Align,Visible);
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列属性,默认可见
/// </summary>
/// <param name="columnName">列名称</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <param name="Format">列格式</param>
/// <param name="Align">靠齐方式</param>
/// <returns>完成状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetColumn(string columnName,int Width,string Title,FormatIndex Format,HorizontalAlignment Align)
{
DataGridTableStyle currGTS = GetGridTableStyle();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(currGTS==null)
{
throw new Exception("初始化表风格出错!");
}
int columnIndex = getColumnIndex(currGTS,columnName);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(columnIndex==-1)
{
throw new Exception("列名称为空或者无效!");
}
return SetColumn(columnIndex,Width,Title,Format,Align);
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列属性,默认可见,默认靠齐居左
/// </summary>
/// <param name="columnName">列名称</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <param name="Format">列格式</param>
/// <returns>完成状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetColumn(string columnName,int Width,string Title,FormatIndex Format)
{
DataGridTableStyle currGTS = GetGridTableStyle();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(currGTS==null)
{
throw new Exception("初始化表风格出错!");
}
int columnIndex = getColumnIndex(currGTS,columnName);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(columnIndex==-1)
{
throw new Exception("列名称为空或者无效!");
}
return SetColumn(columnIndex,Width,Title,Format);
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列属性,默认可见,默认靠齐居左,默认文本格式
/// </summary>
/// <param name="columnName">列名称</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <returns>完成状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetColumn(string columnName,int Width,string Title)
{
DataGridTableStyle currGTS = GetGridTableStyle();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(currGTS==null)
{
throw new Exception("初始化表风格出错!");
}
int columnIndex = getColumnIndex(currGTS,columnName);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(columnIndex==-1)
{
throw new Exception("列名称为空或者无效!");
}
return SetColumn(columnIndex,Width,Title);
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设置列属性,默认可见,默认靠齐居左,默认文本格式,默认标题为影射名
/// </summary>
/// <param name="columnName">列名称</param>
/// <param name="Width">宽度</param>
/// <returns>完成状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SetColumn(string columnName,int Width)
{
DataGridTableStyle currGTS = GetGridTableStyle();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(currGTS==null)
{
throw new Exception("初始化表风格出错!");
}
int columnIndex = getColumnIndex(currGTS,columnName);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(columnIndex==-1)
{
throw new Exception("列名称为空或者无效!");
}
return SetColumn(columnIndex,Width);
}
}
}
下面的代码是演示如何使用这个类:
OleDbConnection conn = new OleDbConnection( "Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=\"E:\\sf\\DataBasew.mdb\";Mode=Share Deny None;Jet OLEDB:Engine Type=5;Provider=\"Microsoft.Jet.OLEDB.4.0\";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1" );
OleDbDataAdapter da = new OleDbDataAdapter("SELECT A.设备编号, b.设备名称, b.所属设备组, A.检测时间, A.气体压力, A.换算压力, A.气体湿度, A.气体温度, A.诊断代码 FR" +
"OM (六氟化硫数据 A LEFT OUTER JOIN 测试设备 b ON A.设备编号 = b.编号) ORDER BY b.所属设备组, A.检测时间", conn );
DataSet ds = new DataSet();
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
try
{
da.Fill( ds, "六氟化硫数据" );
}
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}
//这里不需要制定,因为要由风格管理类接管,并且避免dataGrid自动初始化表风格影响速度
//dataGrid.DataSource = ds.Tables[0];
Grid.Service.StyleManager sm = new Grid.Service.StyleManager();
sm.DataGrid = dataGrid; //目标DataGrid
sm.DataSource = ds.Tables[0]; //目标DataTable
sm.AllowSelectedRow = true; //允许行选择
//设置第1列宽200,名称为“设备编号!",数据类型为数值型,局中,不隐藏
sm.SetColumn(0,200,"设备编号 !",Grid.Service.FormatIndex.Numeric,HorizontalAlignment.Center,true);
//设置第2列宽100,不制定名称“用表字段真实名称”,文本类型
sm.SetColumn(1,100,(string)null,Grid.Service.FormatIndex.Text,HorizontalAlignment.Center,true);
//设置第4列为日期时间类型
sm.SetColumn(3,200,(string)null,Grid.Service.FormatIndex.DateTime);
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
sm.SetReadOnlyColumns(new int[]
{0,2,5},true); //只读列0,2,5
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
sm.SetReadOnlyRows(new int[]
{0,4,6,8},true);//只读行0,4,6,8
sm.SetHeader(new Font("黑体",9f),Color.Red); //设置列头字体,黑体9号字,红色
sm.SetGrid("测试表格",true,false); //显示表格标题,不显示行标题
conn.Close();
希望这个类对你有所帮助。
作为数据表格的应用最重要的应该不是风格的颜色搭配,而是字段属性的格式化,要格式化每一列的数据显示值,比如说:dataGrid的记录集如果有个“日期时间”字段的话,就会发现,默认的话其实它只显示了日期部分,而时间被Format掉了,这样的话不能满足应用的需求。很多新手朋友也发过帖子询问如何显示出时间,本人也是属于新手行列,查阅了MSDN后编写了一个管理dataGrid 格式列和风格的类,它可以实现管理‘列宽、字体、标题名、格式类型、是否隐藏、行选、行只读、列只读’的基本功能。
先大致讲一下格式化列的原理。列的格式由DataGridTextBoxColumn的Format属性进行控制,Format 属性可以支持日期、货币、数值、文本等格式字符,具体信息可以参考MSDN:http://msdn.microsoft.com/library/CHS/cpref/html/frlrfSystemWindowsFormsDataGridTextBoxColumnClassFormatTopic.asp?frame=true。
这里演示格式化“日期时间”,代码:
DataGridTextBoxColumn gridColumn = DataGridTextBoxColumn();
gridColumn.Format=System.String.Format("yyyy-MM-dd hh:mm:ss",gridColumn.TextBox);
类的基本流程:
![](/images/cnblogs_com/chinasf/I.jpeg)
现在我把类的源码贴上面,我不保证代码的一些做法是否合理与正确,仅供参考:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
希望这个类对你有所帮助。