Infragistics组件-UltraGrid对象间关系总结

来源:互联网 发布:去他妈的全世界 知乎 编辑:程序博客网 时间:2024/05/18 13:09

  UltraGrid控件是Infragistics公司出品的表格控件,具有强大的数据展现力。关于这个组件的介绍,网上资料较少。

  首先看一下UltraGrid的组织架构DisplayLayout对象,这是主要使用的顶级对象。

  DisplayLayout对象主要包含一个BandsCollection对象Bands,一个RowsCollection对象Rows 和相关外观属性的设置,及事件;Bands又包含ColumnsCollection对象Columns,BandHeader对象Header。Rows,Columns都好理解。关键是UltraGridBand这个对象不太好理解。在UltraWinGrid对Band的定义:

A band is a collection of data rows that all have the same set of fields(columns) much like a table or view in a database. Each band, which contains rows, represents one level of the hierarchy in a hierarchical recordset.

  Band是一系列行的集合,这些行具有共同的列集合,非常像数据库中的一张表或视图。

  如下图所示,一个DisplayLayout对象包含最顶级的UltraGridBand名称为主题Info,其包含1个子详细Info的UltraGridBand。每个UltraGridBand包含着一个BandHeader对象,一个ColumnsCollection对象和其他对象。DisplayLayout对象主要还包含RowsCollection对象Row.


UltraGrid主体组织架构

  构造一个grid,并填充数据,分析下对象常用属性。

  构造数据源,并填充网格ultraGrid1

            /*构造数据源,并赋值给datasource*/            DataTable table = new DataTable("testTable");            table.Columns.AddRange(new DataColumn[]            {                                new DataColumn("姓名",typeof(string)),                new DataColumn("分数",typeof(int))             });            var row = table.NewRow();            row[0] = "gz";            row[1] = 100;            table.Rows.Add(row);            this.ultraGrid1.DataSource = table;    

  主要分析常用的外观属性(appearance)。首先看一下DisplayLayout这个对象。对它的属性设置,整体都会看到一个效果,影响的元素往往都是一类(比如多个列头,多行等)。如果想设置网格所有列的背景色为Green色,那么可以用DisplayLayout这个对象,代码如下:

  注意,第一行代码,非常重要,默认为true,如果不将它设为false,以下很多背景色的设置都将无效。我自己摸索了很长时间,通过文档,好不容易才发现的这个问题,需要有这个设置。

  定制的外观属性,很多都是通过override这个对象设置的,看下override对象的官方解释:

The UltraGridOverride object is used to determine the behavior of bands in
the grid. Applying an UltraGridOverride to an object replaces that object’s
default behavior with the behavior specified by the settings of the UltraGridOverride.

设置所有列的列头为绿色背景的代码:this.ultraGrid1.UseOsThemes = DefaultableBoolean.False; //var layout = this.ultraGrid1.DisplayLayout;layout .Override.HeaderAppearance.BackColor = Color.Green; //设置每一列的列头背景颜色

  通过HeaderAppearance这个对象设置后,不仅所有列的列头背景色都成为了绿色,而且BandHeader的背景色都变为绿色。什么是BandHeader? 请看:

var bandHead = layout.Bands[0].Header;

  上图我们看到了,一个grid可以包括很多个Band对象,即Bands。表格最常用的一般只有一个Band,也即Bands[0],它的一个属性Header便是总头。
除了可以设置表头外,还可以设置单元格的默认背景色:

           layout.Override.CellAppearance.BackColor = Color.CornflowerBlue;//单元格的背景色

  还可以设置当光标位于表格某一个单元格上时,单元格的背景颜色:

            layout.Override.HotTrackCellAppearance.BackColor = Color.Aquamarine; //热键背景色

  以上说的都是整体性设置,如果想细致到某个或某列或某个单元格,需要修改更细的对象和属性。
  拿到第一个Band:

   var band = this.ultraGrid1.DisplayLayout.Bands[0]; //UltraGridBand对象          

  拿到列对象集合:

  var colums = band.Columns; //ColumnsCollection

  设置表格第0个列头的背景色。注意需要区分两个对象,容易混淆。

            /*区分两个对象*/            //参照上图示例            var header = band.Header; //BandHeader对象            var colHeader = band.Columns[0].Header; //ColumnHeader对象(第一列的列头)            band.HeaderVisible = true;//默认是false            header.Caption = "成绩表";//Header对象的标题            header.Appearance.BackColor = Color.Bisque;            colHeader.Appearance.BackColor = Color.Chartreuse; //设置列头            colHeader.Appearance.ForeColor = Color.Coral;

  当然也可以设置某行的背景色或某个单元格的背景色。

总结:
  如果设置背景色,必须包括一行代码:

this.ultraGrid1.UseOsThemes = DefaultableBoolean.False; 

  如果整体都想设置成为一个属性,可以修改DisplayLayout上的属性,如果想定位到某一个,需要修改Bands[0]中的属性。

3 0