Infragistics netadvantage UltraGrid (UltraWinGrid) 基本用法

文章參考:http://www.cnblogs.com/surfsky/archive/2008/08/20/1272104.html

 

下面紅顏色標出我在項目中經常用到的內容。

UltraGrid 是Infragistics netadvanage 控件庫中提供的一個Windows 網格控件,功能強大,完全可以取代VS 中提供的 GridView控件。但不知爲何,國內介紹它的文章很少。這玩意功能是相當強大,但其屬性設計原理和普通控件不太一樣,屬性極爲複雜,沒有手冊幾乎無法編碼。

參考
    提供商首頁:http://www.infragistics.com/

術語
    persist     持續化(保存)
    property    屬性
    attribute   特性
    setting     設置
    Band        數據條帶

 

示例圖片

 

 

 

 

■■■■■■■■■■■■■■■■■■■■■■■■■
■■ Actions                                  ■■
■■■■■■■■■■■■■■■■■■■■■■■■■
KeyActionMappings(按鍵動作映射)
    // 使用Enter切換到下一個單元格
    using Infragistics.Win.UltraWinGrid;
    this.ultraGrid1.KeyActionMappings.Add(
        new GridKeyActionMapping(
            Keys.Enter,                       // 按下回車鍵時
            UltraGridAction.NextCell,         // 跳轉到下一單元格
            UltraGridState.IsCheckbox,        // 單元格不能爲checkbox
            UltraGridState.Cell,              // 選中單元格時
            0,                                // 不禁止特殊鍵
            0                                 // 不需要特殊鍵
        )
    );

    // 按下H鍵導航到表格的第一行
    this.ultraGrid1.KeyActionMappings.Add( 
        new GridKeyActionMapping( 
            Keys.H,                           // 按下H鍵
            UltraGridAction.FirstRowInGrid,   // 定位到網格的首行
            UltraGridState.InEdit,            // 此時網格不處於編輯狀態
            0,                                // 無附加狀態需求
            Infragistics.Win.SpecialKeys.Alt, // 此時Alt鍵沒有按下
            0                                 // 無附加特殊按鍵需求
        )
    );
      

PerformActions(執行預設動作)
 switch (e.Tool.Key)
 {
     case "Undo":
      this.ultraGrid1.PerformAction(UltraGridAction.Undo);
      break;
     case "Redo":
      this.ultraGrid1.PerformAction(UltraGridAction.Redo);
      break;
     case "Copy":
      this.ultraGrid1.PerformAction(UltraGridAction.Copy);
      break;
     case "Paste":
      this.ultraGrid1.PerformAction(UltraGridAction.Paste);
      break;
     case "Cut":
      this.ultraGrid1.PerformAction(UltraGridAction.Cut);
      break;
     case "Delete":
      this.ultraGrid1.PerformAction(UltraGridAction.DeleteCells);
      break;
     case "Select All":
      foreach (UltraGridRow row in this.ultraGrid1.Rows.GetRowEnumerator
(GridRowType.DataRow, null, null))
      {
       row.Selected = true;
      }
      break;
 }

    // 響應鍵盤事件
    private void ultraGrid1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
    {
     switch(e.KeyCode)
     {
      case Keys.Up:
       this.ultraGrid1.PerformAction(UltraGridAction.ExitEditMode, false,
false);
       this.ultraGrid1.PerformAction(UltraGridAction.AboveCell, false,
false);
       e.Handled = true;
       this.ultraGrid1.PerformAction(UltraGridAction.EnterEditMode, false,
false);
       break;
      case Keys.Down:
       this.ultraGrid1.PerformAction(UltraGridAction.ExitEditMode, false,
false);
       this.ultraGrid1.PerformAction(UltraGridAction.BelowCell, false,
false);
       e.Handled = true;
       this.ultraGrid1.PerformAction(UltraGridAction.EnterEditMode, false,
false);
       break;
      case Keys.Right:
       this.ultraGrid1.PerformAction(UltraGridAction.ExitEditMode, false,
false);
       this.ultraGrid1.PerformAction(UltraGridAction.NextCellByTab, false,
false);
       e.Handled = true;
       this.ultraGrid1.PerformAction(UltraGridAction.EnterEditMode, false,
false);
       break;
      case Keys.Left:
       this.ultraGrid1.PerformAction(UltraGridAction.ExitEditMode, false,
false);
       this.ultraGrid1.PerformAction(UltraGridAction.PrevCellByTab, false,
false);
       e.Handled = true;
       this.ultraGrid1.PerformAction(UltraGridAction.EnterEditMode, false,
false);
       break;
     }
    }
    // 設置激活單元格背景色   
    private void ultraGrid1_InitializeLayout(object sender, InitializeLayoutEventArgs e)
    {
     this.ultraGrid1.DisplayLayout.Override.ActiveCellAppearance.BackColor = Color.Red;
    }
 // Set ActiveRow and ActiveCell on grid entry
    private void ultraGrid1_Enter(object sender, System.EventArgs e)
    {
     if(this.ultraGrid1.ActiveRow == null)
      this.ultraGrid1.ActiveRow = this.ultraGrid1.GetRow(ChildRow.First);
     if(this.ultraGrid1.ActiveCell == null)
      this.ultraGrid1.ActiveCell = this.ultraGrid1.ActiveRow.Cells[2];
    }

■■■■■■■■■■■■■■■■■■■■■■■■■
■■ Grid Events                              ■■
■■■■■■■■■■■■■■■■■■■■■■■■■
按鍵受理
    private void ultraGrid1_KeyPress(object sender, KeyPressEventArgs e)
    {
     // For the OrderDate column, change the periods to slashes
     switch (this.ultraGrid1.ActiveCell.Column.Key)
     {
      case "OrderDate":
       if(e.KeyChar.ToString() == ".")
       {
        e.Handled = true;
        SendKeys.Send("/");
       }
       break;
     }
    }

InitializeLayout
 private void UltraGrid1_InitializeLayout(object sender,

Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs e)
 {
  e.Layout.Override.AllowAddNew = AllowAddNew.FixedAddRowOnTop;
  e.Layout.Override.TemplateAddRowAppearance.BackColor = Color.FromArgb( 245,
250, 255 );
  e.Layout.Override.TemplateAddRowAppearance.ForeColor = SystemColors.GrayText;
  e.Layout.Override.AddRowAppearance.BackColor = Color.LightYellow;
  e.Layout.Override.AddRowAppearance.ForeColor = Color.Blue;
  e.Layout.Override.SpecialRowSeparator = SpecialRowSeparator.TemplateAddRow;
  e.Layout.Override.SpecialRowSeparatorAppearance.BackColor =
SystemColors.Control;
  e.Layout.Override.TemplateAddRowPrompt = "Click here to add a new record...";
  e.Layout.Override.TemplateAddRowPromptAppearance.ForeColor = Color.Maroon;
  e.Layout.Override.TemplateAddRowPromptAppearance.FontData.Bold =
DefaultableBoolean.True;
  e.Layout.Bands[0].SpecialRowPromptField = e.Layout.Bands[0].Columns[0].Key;
  e.Layout.Bands[0].Columns[5].DefaultCellValue = "(DefaultValue)";
  e.Layout.ScrollStyle = ScrollStyle.Immediate;
  e.Layout.ScrollBounds = ScrollBounds.ScrollToFill;

  // Initialize controls
  this.LoadAllowAddNewCombo( this.ultraComboEditorAllowAddNew );
  this.LoadEnumCombo( this.ultraComboEditorSpecialRowSeparatorBorderStyle,
typeof( UIElementBorderStyle ) );
  this.LoadColumnsCombo( this.ultraComboEditorSpecialRowPromptField,
e.Layout.Bands[0] );

  // Initialize the controls to their values.
  this.ultraComboEditorAllowAddNew.Value = e.Layout.Override.AllowAddNew;
  this.ultraComboEditorSpecialRowSeparatorBorderStyle.Value =
e.Layout.Override.BorderStyleSpecialRowSeparator;
  this.ultraNumericEditorAddRowSpacingAfter.Value =
e.Layout.Override.TemplateAddRowSpacingAfter;
  this.ultraNumericEditorAddRowSpacingBefore.Value =
e.Layout.Override.TemplateAddRowSpacingBefore;
  this.ultraNumericEditorSeparatorHeight.Value =
e.Layout.Override.SpecialRowSeparatorHeight;
  this.ultraCheckEditorAddNewBox.Checked = ! e.Layout.AddNewBox.Hidden;
  this.ultraCheckEditorCardView.Checked = e.Layout.Bands[0].CardView;
  this.ultraCheckEditorSeparator.Checked = 0 != (
SpecialRowSeparator.TemplateAddRow & e.Layout.Override.SpecialRowSeparator );
  this.ultraTextEditorAddRowPrompt.Value =
e.Layout.Override.TemplateAddRowPrompt;
 }


■■■■■■■■■■■■■■■■■■■■■■■■
■■ Mouse Events                           ■■
■■■■■■■■■■■■■■■■■■■■■■■■
確定用戶點擊的數據條帶
    private void ultraGrid1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
     // Declare and retrieve a reference to the UIElement
     UIElement aUIElement =
      this.ultraGrid1.DisplayLayout.UIElement.ElementFromPoint(new Point(e.X, e.Y));
     if(aUIElement == null)
      return;
       
     UltraGridBand aBand = null;
     // Look for a row
     UltraGridRow aRow = (UltraGridRow)aUIElement.GetContext(typeof(UltraGridRow));
     if(aRow != null)
      aBand = this.ultraGrid1.DisplayLayout.Bands[aRow.Band.Index];
     if(aBand == null)
     {
      // Look for a column 
      UltraGridColumn aColumn =
        (UltraGridColumn)aUIElement.GetContext(typeof(UltraGridColumn));
      if(aColumn != null)
       aBand = this.ultraGrid1.DisplayLayout.Bands[aColumn.Band.Index];
     }
      
     // If a band was found display the band index
     if(aBand != null)
      this.ultraTextEditor1.Text = "Band(" + aBand.Index.ToString() + ")";
     else
      this.ultraTextEditor1.Text = "* no band associcated with this location";
       
    }
   


■■■■■■■■■■■■■■■■■■■■■■■■
■■ Row Events                             ■■
■■■■■■■■■■■■■■■■■■■■■■■■
給每一行展示一個說明
    this.ultraGrid1.DisplayLayout.Bands[0].AutoPreviewEnabled = true;
    private void datagrid1_InitializedRow(....)
    {
        e.row.Description = "My description";
    }

■■■■■■■■■■■■■■■■■■■■■■■■
■■ Cell Events                            ■■
■■■■■■■■■■■■■■■■■■■■■■■■
單元格數據修改後事件
    ultraGrid1_AfterCellUpdate

當前單元格變動事件
    private void datagrid1_CurrentCellChanged(object sender, System.EventArgs e)
    {
        int inumber = this.datagrid1.currentcell.rownumber;  
        string smyid = this.datagrid1[inumber, 0].tostring();//獲取到第i行第一列的值
    }


■■■■■■■■■■■■■■■■■■■■■■■■
■■ Scroll                                 ■■
■■■■■■■■■■■■■■■■■■■■■■■■
滾動到首行
    private void ultraButton1_Click(object sender, System.EventArgs e)
    {
     // If there are no rows this method will not work
     if(this.ultraGrid1.Rows.Count <= 0)
      return;
     this.ultraGrid1.ActiveRow = this.ultraGrid1.Rows[0];
    }

上滾一行
    // If no ActiveRow this procedure will not work
 if(this.ultraGrid1.ActiveRow == null)
  return;
 // Retrieve reference to current ActiveRow and look for a previous row
 UltraGridRow aRow = this.ultraGrid1.ActiveRow;

 // Look to see if this row has a Previous Sibling
 if(aRow.HasPrevSibling() == true)
 {
  // Set ActiveRow to this row to make it visible
  this.ultraGrid1.ActiveRow = aRow.GetSibling(SiblingRow.Previous);
  // Look to see if this row has children
  if(this.ultraGrid1.ActiveRow.HasChild())
  {
   // Look for lowest child in hierarchy
   aRow = this.ultraGrid1.ActiveRow;
   while(aRow.HasChild() != false)
   {
    aRow = aRow.GetChild(ChildRow.Last);
   }
   this.ultraGrid1.ActiveRow = aRow;
  }
  return;
 }

 // Look to see if this row has a Parent
 if(aRow.HasParent(aRow.Band.ParentBand) == true)
  this.ultraGrid1.ActiveRow = aRow.ParentRow;

下滾一行
 if(this.ultraGrid1.ActiveRow == null)
  return;
 // Retrieve reference to current ActiveRow
 UltraGridRow aRow = this.ultraGrid1.ActiveRow;
 // Look to see if this row has a child row
 if(aRow.HasChild() == true)
 {
  aRow = aRow.GetChild(ChildRow.First);
  this.ultraGrid1.ActiveRow = aRow;
  return;
 }

 // Look to see if this row has a next sibling
 if(aRow.HasNextSibling() == true)
 {
  aRow = aRow.GetSibling(SiblingRow.Next);
  this.ultraGrid1.ActiveRow = aRow;
  return;
 }

 // Look for next sibling of parent
 aRow = aRow.ParentRow;
 if(aRow != null)
 {
  if(aRow.HasNextSibling() == true)
  {
   aRow = aRow.GetSibling(SiblingRow.Next);
   this.ultraGrid1.ActiveRow = aRow;
   return;
  }
 }

 if(aRow != null)
  this.ultraGrid1.ActiveRow = aRow;

滾到最後一行
 if(this.ultraGrid1.ActiveRow == null)
  return;
 // Retrieve last row in band(0)
 UltraGridRow aRow = this.ultraGrid1.GetRow(ChildRow.Last);
 // Look for last child of last child
 while(aRow.HasChild() != false)
 {
  aRow = aRow.GetChild(ChildRow.Last);
 } 
 // Back up as many as three rows so we can see what is above this row
 UltraGridRow topRow = aRow;
 int intCount = 3;
 while(intCount <= 0 || topRow.HasPrevSibling() == false)
 {
  intCount -= 1;
  topRow = topRow.GetSibling(SiblingRow.Previous);
 }
 // Set topRow as active row to position it to top of Grid
 this.ultraGrid1.ActiveRow = topRow;
 // Set aRow as Active Row
 this.ultraGrid1.ActiveRow = aRow;


滾動到父band的首行
    private void ultraGrid1_BeforeRowActivate(object sender, RowEventArgs e)
    {
     // Determine which row should be the top row
     UltraGridRow rowTop;
     if(e.Row.Band.Index == 0)
      rowTop = e.Row;
     else
      rowTop = e.Row.ParentRow;
   
     // Scroll the row into RowScrollRegion
     this.ultraGrid1.DisplayLayout.RowScrollRegions[0].ScrollRowIntoView(rowTop);
     // Turn off display refresh during update
     this.ultraGrid1.BeginUpdate();
   
     // Scroll the top row to the top
     while(this.ultraGrid1.DisplayLayout.RowScrollRegions[0].VisibleRows[0].Row != rowTop)
     {
      this.ultraGrid1.DisplayLayout.RowScrollRegions[0].Scroll(
        RowScrollAction.LineDown);
     }
   
     // Turn display refresh back on
     this.ultraGrid1.EndUpdate();
    }

 

 

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using UltraBid.DAL;
using Infragistics.Win;
using Infragistics.Win.UltraWinDataSource;
using Infragistics.Win.UltraWinGrid;


namespace UltraBid.Controls
{
    public partial class BidCompanyForm : UserControl, IShowBidInfo
    {
        Bid _bid;
        IList _list;


        public void ShowInfo(Bid bid)
        {
            _bid = bid;
            if (_bid != null)
            {
                _list = BidPaper.ListByBidId(bid.BidId);
                ultraDataSource.Rows.SetCount(_list.Count);
                this.grid.DataSource = ultraDataSource;
                //this.grid.SetDataBinding(_list, "", true);
            }
        }


        //---------------------------------------
        // Init
        //---------------------------------------
        public BidCompanyForm()
        {
            InitializeComponent();
        }

        private void BidCompanyForm_Load(object sender, EventArgs e)
        {
        }


        //-----------------------------------------------------
        // ultraDataSource
        //-----------------------------------------------------
        private void ultraDataSource_RowAdding(object sender, RowAddingEventArgs e)
        {
            BidPaper paper = new BidPaper();
            paper.BidId = _bid.BidId;
            _list.Add(paper);
        }

        private void ultraDataSource_RowDeleting(object sender, RowDeletingEventArgs e)
        {
            (_list[e.Row.Index] as BidPaper).Remove();
            _list.RemoveAt(e.Row.Index);
        }


        private void ultraDataSource_CellDataRequested(object sender, CellDataRequestedEventArgs e)
        {
            BidPaper paper = _list[e.Row.Index] as BidPaper;
            if (paper == null) return;
            switch (e.Column.Key)
            {
                case "BidPaperId":
                    e.Data = paper.BidPaperId;
                    break;
                case "BidId":
                    e.Data = paper.BidId;
                    break;
                case "BidCompanyName":
                    e.Data = paper.BidCompanyName;
                    break;
                case "BidCompanyAsset":
                    e.Data = paper.BidCompanyAsset;
                    break;
                case "BidManager":
                    e.Data = paper.BidManager;
                    break;
                case "BidContact":
                    e.Data = paper.BidContact;
                    break;
                case "BidTel":
                    e.Data = paper.BidTel;
                    break;
                case "BidDeposit":
                    e.Data = paper.BidDeposit;
                    break;
                case "BidRemark":
                    e.Data = paper.BidRemark;
                    break;
            }
        }

        private void ultraDataSource_CellDataUpdating(object sender, CellDataUpdatingEventArgs e)
        {
            BidPaper paper = _list[e.Row.Index] as BidPaper;
            if (paper == null) return;
            switch (e.Column.Key)
            {
                case "BidCompanyName":
                    paper.BidCompanyName = Convert.ToString(e.NewValue);
                    break;
                case "BidCompanyAsset":
                    paper.BidCompanyAsset = Convert.ToString(e.NewValue);
                    break;
                case "BidManager":
                    paper.BidManager = Convert.ToString(e.NewValue);
                    break;
                case "BidContact":
                    paper.BidContact = Convert.ToString(e.NewValue);
                    break;
                case "BidTel":
                    paper.BidTel = Convert.ToString(e.NewValue);
                    break;
                case "BidDeposit":
                    paper.BidDeposit = Convert.ToDouble(e.NewValue);
                    break;
                case "BidRemark":
                    paper.BidRemark = Convert.ToString(e.NewValue);
                    break;
            }
            paper.Persist();
        }


        //---------------------------------------
        // Grid
        //---------------------------------------
        private void grid_InitializeLayout(object sender, InitializeLayoutEventArgs e)
        {
            //e.Layout.Override
            e.Layout.Override.AllowAddNew = AllowAddNew.TemplateOnBottom;
            e.Layout.Override.TemplateAddRowAppearance.BackColor = Color.FromArgb(245, 250, 255);
            e.Layout.Override.TemplateAddRowAppearance.ForeColor = SystemColors.GrayText;
            e.Layout.Override.AddRowAppearance.BackColor = Color.LightYellow;
            e.Layout.Override.AddRowAppearance.ForeColor = Color.Blue;
            e.Layout.Override.SpecialRowSeparator = SpecialRowSeparator.TemplateAddRow;
            e.Layout.Override.SpecialRowSeparatorAppearance.BackColor = SystemColors.Control;
            e.Layout.Override.TemplateAddRowPrompt = "點此添加新記錄...";
            e.Layout.Override.TemplateAddRowPromptAppearance.ForeColor = Color.Maroon;
            e.Layout.Override.TemplateAddRowPromptAppearance.FontData.Bold = DefaultableBoolean.True;
        }

        private void grid_AfterCellUpdate(object sender, CellEventArgs e)
        {
            //BidPaper paper = _list[e.Cell.Row.Index] as BidPaper;
            //paper.Persist();
        }

        private void grid_BeforeRowsDeleted(object sender, BeforeRowsDeletedEventArgs e)
        {
            e.DisplayPromptMsg = false;
            e.Cancel = (DialogResult.Yes != MessageBox.Show("確定刪除該記錄?", "刪除", MessageBoxButtons.YesNo));
        }

        private void grid_CellDataError(object sender, CellDataErrorEventArgs e)
        {
            e.RaiseErrorEvent = false;
            e.StayInEditMode = true;
            MessageBox.Show("輸入數據的格式不正確,請校驗");
        }
    }
}

 

 

 


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ Bind                                             ■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
綁定到IList(僅展示,不能添加刪除)
    this.ultraGrid1.SetDataBinding(myObjectList, "", true);

綁定到平面數據源(DataTable)
    private void ultraButton1_Click(object sender, System.EventArgs e)
    {
     // Declare a DataTable to contain the program generated data
     DataTable dataTable = new DataTable("TableTest");
   
     // Create and add a CustomerID column
     DataColumn colWork = new DataColumn("CustomerID", System.Type.GetType("System.Int32"));
     dataTable.Columns.Add(colWork);
   
     // Add CustomerID column to key array and bind to DataTable
     DataColumn[] Keys = new DataColumn[1];
     Keys[0] = colWork;
     dataTable.PrimaryKey = Keys;
   
     // Create and add a CustomerName column
     colWork = new DataColumn("CustomerName", System.Type.GetType("System.String"));
     colWork.MaxLength = 50;
     dataTable.Columns.Add(colWork);
   
     // Create and add a LastOrderDate column
     colWork = new DataColumn("LastOrderDate", System.Type.GetType("System.DateTime"));
     dataTable.Columns.Add(colWork);
   
     // Add a row
     DataRow row = dataTable.NewRow();
     row["CustomerID"] = 1;
     row["CustomerName"] = "Johns Widgets";
     row["LastOrderDate"] = System.DateTime.Now;
     dataTable.Rows.Add(row);
   
     // Add another row
     row = dataTable.NewRow();
     row["CustomerID"] = 2;
     row["CustomerName"] = "Freds Thingamagigs";
     row["LastOrderDate"] = System.DateTime.Now.AddDays(-101);
     dataTable.Rows.Add(row);
   
     // Bind the table to the grid
     this.ultraGrid1.DataSource = dataTable; 
    }

綁定到層級數據源(DataSet)
    private void ultraButton1_Click(object sender, System.EventArgs e)
    {
     // Declare DataSet to contain Hierarchical data
     // Make Customers DataTable
     // Make Orders DataTable
     DataSet dataSet = new DataSet();
     dataSet.Tables.Add(MakeCustomersDataTable());
     dataSet.Tables.Add(MakeOrdersDataTable(dataSet.Tables["Customers"]));
   
     // Create customers/orders relationship and add to DataSet
     DataRelation relCustOrder = new DataRelation(
         "CustOrder"
       , dataSet.Tables["Customers"].Columns["CustomerID"]
       , dataSet.Tables["Orders"].Columns["CustomerID"]
       );
     dataSet.Relations.Add(relCustOrder);
   
     // Bind the DataSet to the Grid
     this.ultraGrid1.DataSource = dataSet;
    }
    // 客戶表
    private DataTable MakeCustomersDataTable()
    {
     // Declare a DataTable to contain the program generated data
     DataTable dataTable = new DataTable("Customers");
   
     // Create and add a CustomerID column
     DataColumn colWork = new DataColumn("CustomerID", System.Type.GetType

("System.Int32"));
     dataTable.Columns.Add(colWork);
   
     // Add CustomerID column to key array and bind to DataTable
     DataColumn[] Keys = new DataColumn[1];
     Keys[0] = colWork;
     dataTable.PrimaryKey = Keys;
   
     // Create and add a CustomerName column
     colWork = new DataColumn("CustomerName", System.Type.GetType("System.String"));
     colWork.MaxLength = 50;
     dataTable.Columns.Add(colWork);
   
     // Create and add a L=tOrderDate column
     colWork = new DataColumn("L=tOrderDate", System.Type.GetType("System.DateTime"));
     dataTable.Columns.Add(colWork);
   
     // Add a row
     DataRow row = dataTable.NewRow();
     row["CustomerID"] = 1;
     row["CustomerName"] = "Johns Widgets";
     row["L=tOrderDate"] = System.DateTime.Now;
     dataTable.Rows.Add(row);
   
     // Add another row
     row = dataTable.NewRow();
     row["CustomerID"] = 2;
     row["CustomerName"] = "Freds Thingamagigs";
     row["L=tOrderDate"] = System.DateTime.Now.AddDays(-101);
     dataTable.Rows.Add(row);
   
     return dataTable;
    }
    // 訂單表
    private DataTable MakeOrdersDataTable(DataTable v_customersDataTable)
    {
     // Declare a DataTable to contain the program generated data
     DataTable dataTable = new DataTable("Orders");
   
     // Create and add a CustomerID column
     DataColumn colWork = new DataColumn("CustomerID", System.Type.GetType("System.Int32"));
     dataTable.Columns.Add(colWork);
   
     // Add CustomerID column to key array
     DataColumn[] Keys = new DataColumn[2];
     Keys[0] = colWork;
   
     // Create and add OrderID column
     colWork = new DataColumn("OrderID", System.Type.GetType("System.String"));
     colWork.MaxLength = 15;
     dataTable.Columns.Add(colWork);
   
     // Add OrderID column to key array and bind to DataTable
     Keys[1] = colWork;
     dataTable.PrimaryKey = Keys;
   
     // Create and add a EmployeeID column
     colWork = new DataColumn("EmployeeID", System.Type.GetType("System.Int32"));
     dataTable.Columns.Add(colWork);
   
     // Create and add a OrderDate column
     colWork = new DataColumn("OrderDate", System.Type.GetType("System.DateTime"));
     dataTable.Columns.Add(colWork);
   
     // Loop through Customer table and add Order rows
     foreach( DataRow custRow in v_customersDataTable.Rows)
     {
      // Add four rows for each Customer
      DataRow row;
      for(Int32 intPtr = 1; intPtr <= 4; intPtr++)
      {
       row = dataTable.NewRow();
       row["CustomerID"] = custRow["CustomerID"];
       row["OrderID"] = intPtr * ((Int32)custRow["CustomerID"]);
       row["EmployeeID"] = intPtr * 10;
       row["OrderDate"] = System.DateTime.Now.AddDays(intPtr);
       dataTable.Rows.Add(row);
      }
     }
     return dataTable;
    }

■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ 窗體控件數據同步                           ■■
■■■■■■■■■■■■■■■■■■■■■■■■■■
與窗體控件同步數據
    private void DataSourcesandWinGridRows_Load(object sender, System.EventArgs e)
    {
     this.txtDiscount.DataBindings.Add("Text", this.winGrid1.Order_Details, "Discount");
     this.txtQuantity.DataBindings.Add("Text", this.winGrid1.Order_Details, "Quantity");
     this.txtUnitPrice.DataBindings.Add("Text", this.winGrid1.Order_Details, "UnitPrice");
    }
    private void ultraGrid1_InitializeLayout(object sender, InitializeLayoutEventArgs e)
    {
     e.Layout.Override.SelectTypeRow = SelectType.Single;
     e.Layout.Override.CellClickAction = CellClickAction.RowSelect;
    }
    private void ultraGrid1_AfterSelectChange(object sender, AfterSelectChangeEventArgs e)
    {
     // Use CurrencyManager to set position
     CurrencyManager currencyManager1;
     currencyManager1 = (CurrencyManager)this.BindingContext[this.winGrid1.Order_Details];
     currencyManager1.Position = this.ultraGrid1.Selected.Rows[0].Index;
    }

同步示例二
    private void WinGridasaDataNavigator_Load(object sender, System.EventArgs e)
    {
     // Set data binding for text boxes
     this.txtCompanyName.DataBindings.Add("Text", this.ultraGrid1.DataSource, "CompanyName");
     this.txtContactName.DataBindings.Add("Text", this.ultraGrid1.DataSource, "ContactName");
     this.txtContactTitle.DataBindings.Add("Text", this.ultraGrid1.DataSource, "ContactTitle");
     this.txtAddress.DataBindings.Add("Text", this.ultraGrid1.DataSource, "Address");
     this.txtCity.DataBindings.Add("Text", this.ultraGrid1.DataSource, "City");
     this.txtRegion.DataBindings.Add("Text", this.ultraGrid1.DataSource, "Region");
     this.txtPostalCode.DataBindings.Add("Text", this.ultraGrid1.DataSource, "PostalCode");
     this.txtCountry.DataBindings.Add("Text", this.ultraGrid1.DataSource, "Country");
    }
    private void ultraGrid1_InitializeLayout(object sender, InitializeLayoutEventArgs e)
    {
     // Hide all but "CustomerID" column
     foreach(UltraGridColumn aColumn in e.Layout.Bands[0].Columns)
     {
      switch (aColumn.Key)
      {
       case "CustomerID":
        aColumn.CellActivation = Activation.NoEdit;
        break;
       default :
        aColumn.Hidden = true;
        break;
      }
     }
   
     // Configure grid
     e.Layout.AutoFitStyle = AutoFitStyle.ResizeAllColumns;
     e.Layout.Override.SelectTypeCell = SelectType.None;
     e.Layout.Override.SelectTypeCol = SelectType.None;
     e.Layout.Override.SelectTypeRow = SelectType.None;
    }


■■■■■■■■■■■■■■■■■■■■■■■■■
■■ 獲取數據                                 ■■
■■■■■■■■■■■■■■■■■■■■■■■■■
遍歷行
    遍歷子行
        UltraGridBand band = this.ultraGrid1.DisplayLayout.Bands[1];
        foreach (UltraGridRow row in band.GetRowEnumerator(GridRowType.DataRow))
        {
        }
    遍歷所有行,包括子band
        foreach ( UltraGridRow row in this.ultraGrid1.Rows.GetRowEnumerator( GridRowType.DataRow, null, null ) )
        {
        }


從保護單元格中獲取值
    private void ultraGrid1_DoubleClickCell(object sender, DoubleClickCellEventArgs e)
    {
     Point point = Cursor.Position;
     point = this.ultraGrid1.PointToClient(point);
     UIElement oUI = this.ultraGrid1.DisplayLayout.UIElement.ElementFromPoint(point);
     if (oUI == null)
      return;
     while (oUI != null)
     {
      if (oUI.GetType() == typeof(CellUIElement))
      {
       CellUIElement oCellUI = (CellUIElement)oUI;
       MessageBox.Show("Cell.Value = " + oCellUI.Cell.Value.ToString());
      }
      oUI = oUI.Parent;
     }
    }

獲取指定座標單元格內容
    UIElement myUIElement = this.ultraGrid1.DisplayLayout.UIElement.ElementFromPoint(new Point(e.X, e.Y));
    UltraGridCell myCell = (UltraGridCell)myUIElement.GetContext(typeof(UltraGridCell));
    MessageBox.Show("You are over a Cell containing " + myCell.Value.ToString());

訪問下拉框單元格控件
    private void ultraGrid1_InitializeLayout(object sender, InitializeLayoutEventArgs e)
    {
     ValueList vlist=new ValueList();
     for(int i=0; i<20; i++)
      vlist.ValueListItems.Add(i, "name " + i);
   
     e.Layout.Bands[0].Columns[0].ValueList=vlist;
     e.Layout.Bands[0].Columns[0].style = ColumnStyle.DropDown;
   
     EditorWithCombo editor = (EditorWithCombo)this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Editor;
     editor.HasMRUList = true;
     editor.MaxMRUItems = 3;
     editor.ButtonAlignment = ButtonAlignment.Left;
    }

剪貼板操作
    Clipboard.SetDataObject(this.ultraGrid1.Selected.Cells);
    this.ultraGrid1.DisplayLayout.Override.AllowMultiCellOperations = AllowMultiCellOperation.Copy | AllowMultiCellOperation.Paste;


■■■■■■■■■■■■■■■■■■■■■■■■■
■■ CRUD                                     ■■
■■■■■■■■■■■■■■■■■■■■■■■■■
新增行
    展現新增行
        展現新增行
            this.ultraGrid1.DisplayLayout.Override.AllowAddNew = AllowAddNew.TemplateOnTop; 

// TemplateOnBottom
        提示文本設置
            this.ultraGrid1.DisplayLayout.Override.TemplateAddRowPrompt = "Click here to add rows...";
            this.ultraGrid1.DisplayLayout.Bands[0].SpecialRowPromptField = "Address";
        新增行樣式設置
            this.ultraGrid1.DisplayLayout.Override.TemplateAddRowCellAppearance.BackColor = Color.Yellow;
            this.ultraGrid1.DisplayLayout.Override.TemplateAddRowCellAppearance.ForeColor = Color.LightYellow;
            this.ultraGrid1.DisplayLayout.Override.TemplateAddRowSpacingBefore = 5;
            this.ultraGrid1.DisplayLayout.Override.TemplateAddRowSpacingAfter = 5;
            this.ultraGrid1.DisplayLayout.Override.BorderStyleTemplateAddRow = UIElementBorderStyle.Inset;
    增加行:
        this.ultraGrid1.Rows.Band.AddNew();
    新增行的值填充
        this.ultraGrid1.DisplayLayout.Bands[0].Columns["Country"].DefaultCellValue = "US";
        this.ultraGrid1.Rows[this.ultraGrid1.Rows.Count - 1].Cells["REC_ID"].Value = CommomFun.GetID();
    展現新增按鈕
        this.ultraGrid1.DisplayLayout.AddNewBox.Hidden = false; 
        private void ultraGrid1_InitializeLayout(object sender, InitializeLayoutEventArgs e)
        {
         e.Layout.AddNewBox.Hidden = false;
        }

刪除行:
    刪除選中的行
        this.ultraGrid1.DeleteSelectedRows(false);
    遍歷刪除選擇行和激活行
        bool blnDeleted = false;
        for (int i = 0; i < this.ultraGrid1.Rows.Count; i++)
        {
            if (this.ultraGrid1.Rows[i].Selected || this.ultraGrid1.Rows[i].IsActiveRow)
            {
                if (this.ultraGrid1.Rows[i].Delete(false))
                    i--;
                blnDeleted = true;
            }
        }

■■■■■■■■■■■■■■■■■■■■■■■■■
■■ 數據校驗                                 ■■
■■■■■■■■■■■■■■■■■■■■■■■■■
輸入校驗
    對於無效輸入:自動恢復爲原始值
        private void ultraGrid1_InitializeLayout(object sender, Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs e)
        {
         // Set the property on the display layout's override so it affects the whole WinGrid.
         // You can override the property on a specific column.
         e.Layout.Override.InvalidValueBehavior = InvalidValueBehavior.RevertValue;
         e.Layout.Bands[0].Columns[0].InvalidValueBehavior = InvalidValueBehavior.RetainValueAndFocus;
        }
    使用正則表達式限制輸入
        this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].RegexPattern = "/d{3}-/d{3}-/d{4}";
        private void ultraGrid1_Error(object sender, Infragistics.Win.UltraWinGrid.ErrorEventArgs e)
        {
         e.Cancel = true;
         if(e.ErrorType == ErrorType.Data)
          MessageBox.Show("That is not a valid phone number!!");
        }
    捕捉輸入錯誤
        private void ultraGrid1_CellDataError(object sender, Infragistics.Win.UltraWinGrid.CellDataErrorEventArgs e)
        {
         e.RaiseErrorEvent = false;       // 阻止彈出錯誤提示窗口
         e.RestoreOriginalValue = true;   // 恢復原始值
         e.StayInEditMode = true;         // 繼續保留在編輯模式
        }

       
自定義刪除提示框
    private void ultraGrid1_BeforeRowsDeleted(object sender, BeforeRowsDeletedEventArgs e)
    {
        e.DisplayPromptMsg = false;
        e.Cancel = (DialogResult.Yes != MessageBox.Show("確定刪除該記錄?", "刪除", MessageBoxButtons.YesNo));
    }
   
自定義單元格數據錯誤提示框
    private void grid_CellDataError(object sender, CellDataErrorEventArgs e)
    {
        e.RaiseErrorEvent = false;
        e.StayInEditMode = true;
        MessageBox.Show("輸入數據的格式不正確,請校驗");
    }


■■■■■■■■■■■■■■■■■■■■■■■■
■■ 導出                                   ■■
■■■■■■■■■■■■■■■■■■■■■■■■
導出到Excel
    (1)將 UltraGridExcelExporter 拖到窗體中
    (2)ultraGridExcelExporter1.Export(ultraGrid1, "C://GridData.xls");
    (3)可附加控制導出Excel的細節
        using Infragistics.Win.UltraWinGrid;
        // 修改worksheet名稱
        private void ultraGridExcelExporter1_BeginExport(object sender, ExcelExport.BeginExportEventArgs e)
        {
         e.CurrentWorksheet = e.Workbook.Worksheets.Add("Exported Grid Data");
         e.Workbook.ActiveWorksheet = e.CurrentWorksheet;
        }
        // 阻止導出Owner字段
        private void ultraGridExcelExporter1_CellExporting(object sender, ExcelExport.CellExportingEventArgs e)
        {
         string sCellType = e.Value.GetType().FullName;
         if (sCellType == "System.String")
         {
          string sCellContents = e.Value.ToString();
          if (sCellContents.StartsWith("Owner"))
           e.Value = "Position Confidential data *NOT* exported.";
         }
        }
        // 每兩列修改一下邊框樣式
        private void ultraGridExcelExporter1_CellExported(object sender, ExcelExport.CellExportedEventArgs e)
        {
         if(e.CurrentColumnIndex%2==0)
         {
          Infragistics.Excel.IWorksheetCellFormat cfCellFmt;
          int iRdex = e.CurrentRowIndex;
          int iCdex = e.CurrentColumnIndex;
          cfCellFmt = e.CurrentWorksheet.Rows[iRdex].Cells[iCdex].CellFormat;
          cfCellFmt.BottomBorderStyle = Infragistics.Excel.CellBorderLineStyle.Double;
         }
        }

■■■■■■■■■■■■■■■■■■■■■■■■
■■ 接口                                   ■■
■■■■■■■■■■■■■■■■■■■■■■■■
IDataErrorInfo
    // (1) 設置UltraGrid綁定到DataTable
    // (2) 在DataTable 的ColumnChanging, RowChanging 事件中檢測錯誤
    // (3) 開啓UltraGrid錯誤提示支持:e.Layout.Override.SupportDataErrorInfo =

SupportDataErrorInfo.RowsAndCells;
 this.UltraGrid1.SetDataBinding(CreateDataTable(), "" );
    -----------------------
    e.Layout.Override.SupportDataErrorInfo = SupportDataErrorInfo.RowsAndCells;
    e.Layout.Override.DataErrorCellAppearance.ForeColor = Color.Red;
    e.Layout.Override.DataErrorRowAppearance.BackColor = Color.LightYellow;
    e.Layout.Override.DataErrorRowSelectorAppearance.BackColor = Color.Green;
    //--------------------------------------------------
    // DataTable events
    //--------------------------------------------------
    // Create data table
    DataTable CreateDataTable()
    {
        DataTable table = new DataTable("Grades");
        table.Columns.Add("Name", typeof(string));
        table.Columns.Add("Grade", typeof(int));

        table.ColumnChanging += new DataColumnChangeEventHandler(this.OnTableCellValueChanging);
        table.RowChanging += new DataRowChangeEventHandler(this.OnTableRowChanging);

        table.Rows.Add(new object[] { "A", 62 });
        table.Rows.Add(new object[] { "B", 88 });
        table.Rows.Add(new object[] { "C", 94 });
        table.Rows.Add(new object[] { "D", -1 });
        table.Rows.Add(new object[] { "E", 66 });
        table.Rows.Add(new object[] { "F", 46 });

        return table;
    }
    /// <summary>
    /// This method is the event handler for the ColumnChanging event of the table which
    /// we are using as the data source.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void OnTableCellValueChanging(object sender, DataColumnChangeEventArgs e)
    {
        this.ValidateDataRowCell(e.Row, e.Column, e.ProposedValue);
    }
    /// <summary>
    /// This method is the event handler for the ColumnChanging event of the table which
    /// we are using as the data source.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void OnTableRowChanging(object sender, DataRowChangeEventArgs e)
    {
        this.ValidateDataRowCell(e.Row, e.Row.Table.Columns["Name"], e.Row["Name"]);
        this.ValidateDataRowCell(e.Row, e.Row.Table.Columns["Grade"], e.Row["Grade"]);
    }
    // check cell data
 private void ValidateDataRowCell( DataRow row, DataColumn column, object value )
 {
  switch ( column.ColumnName )
  {
   case "Name":
   {
    // Clear the error.
    row.SetColumnError( column, "" );
    string name = value.ToString( );
    if ( 0 == name.Length )
     row.SetColumnError( column, "Name cannot be empty."

);
    else
    {
     for ( int i = 0; i < name.Length; i++ )
     {
      if ( ! char.IsLetter( name, i ) )
      {
       row.SetColumnError( column, "Name can not contain non-alphabet characters." );
       break;
      }
     }
    }

    break;
   }
   case "Grade":
   {
    // Clear the error.
    row.SetColumnError( column, "" );
    if ( DBNull.Value == value )
     row.SetColumnError( column, "Name cannot be empty." );
    else
    {
     int grade = (int)value;
     if ( grade < 0 )
      row.SetColumnError( column, "Grade cannot be less than 0." );
     else if ( grade > 100 )
      row.SetColumnError( column, "Grade cannot be greater than 100." );
    }

    break;
   }
  }

  bool invalidName  = row.GetColumnError( "Name" ).Length > 0;
  bool invalidGrade = row.GetColumnError( "Grade" ).Length > 0;
  if ( invalidName && invalidGrade )
   row.RowError = "Invalid name and grade.";
  else if ( invalidName )
   row.RowError = "Invalid name.";
  else if ( invalidGrade )
   row.RowError = "Invalid grade.";
  else
   row.RowError = "";
 }

 

IEditorDataFilter ?
    public class DayOfWeekToDateConverter : IEditorDataFilter
    {
     object IEditorDataFilter.Convert( EditorDataFilterConvertArgs conversionArgs )
     {
      switch (conversionArgs.Direction )
      {
       case ConversionDirection.DisplayToEditor:
       {
        string value = conversionArgs.Value as string;
        if (value != null)
        {
         if (value.ToLower().Equals("today"))
         {
          conversionArgs.Handled = true;
          conversionArgs.IsValid = true;
          return DateTime.Today;
         }
        }
        break;
       }
       case ConversionDirection.EditorToDisplay:
       {
        if (conversionArgs.Value is DayOfWeek)
        {
         DayOfWeek dayOfWeek = (DayOfWeek)conversionArgs.Value;
         DateTime theDate = this.GetDateFromDayOfWeek(dayOfWeek);
         if (theDate == DateTime.Today)
         {
          string[] daysOfWeekNames = CultureInfo.CurrentCulture.DateTimeFormat.DayNames;
          conversionArgs.Handled = true;
          conversionArgs.IsValid = true;
          return daysOfWeekNames[(int)dayOfWeek] + " (Today)";
         }
        }
         break;
       }
       case ConversionDirection.EditorToOwner:
       {
        if (conversionArgs.Value is DayOfWeek)
        {
         DayOfWeek dayOfWeek = (DayOfWeek)conversionArgs.Value;
         DateTime theDate = this.GetDateFromDayOfWeek(dayOfWeek);
         conversionArgs.Handled = true;
         conversionArgs.IsValid = true;
         return theDate;
        }
        break;
       }
       case ConversionDirection.OwnerToEditor:
       {
        if (conversionArgs.Value is DateTime)
        {
         DateTime theDate = (DateTime)conversionArgs.Value;
         conversionArgs.Handled = true;
         conversionArgs.IsValid = true;
         return theDate.DayOfWeek;
        }
        break;
       }    
      }
      return conversionArgs.Value;
     }
     private DateTime GetDateFromDayOfWeek(DayOfWeek dayOfWeek)
     {
      for (int i = 0; i < 7; i ++)
      {
       DateTime theDate = DateTime.Today.AddDays((double)i);
       if (theDate.DayOfWeek == dayOfWeek)
       return theDate;
      }
      return DateTime.Today;
     }
    }

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ Grid                                               ■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
動態轉載樣式文件
    this.ultraGrid1.ApplyPresetFromXml(@"C:/Program Files/Common Files/Infragistics" +
       @"/Presets/Win/UltraGridBase/Standard/FlatGreen.xml", true);

存取佈局文件(可用這玩意設計報表,動態載入)
    this.ultraGrid1.DisplayLayout.SaveAsXml("WinGridLayout.xml");
    this.ultraGrid1.DisplayLayout.LoadFromXml(System.IO.Path.Combine(Application.StartupPath,

@"../../ExtraFiles/WinGridLayout.xml"));


使用Appearance(類似預定義的樣式)
    this.ultraGrid1.DisplayLayout.Appearances.Add("Highlighted" );
    this.ultraGrid1.DisplayLayout.Appearances["Highlighted" ].BackColor = Color.Red;
    this.ultraGrid1.DisplayLayout.Appearances["Highlighted" ].BackColor = Color.White;
    或者直接給預設Appearance賦值
    this.ultraGrid1.DisplayLayout.Override.ActiveRowAppearance.ForeColor = Color.White;

使用操作系統樣式
    this.ultraGrid1.UseOsThemes = DefaultableBoolean.True;

HotTrack
 this.ultraGrid1.DisplayLayout.Override.HotTrackCellAppearance.BackColor = Color.Blue;
 this.ultraGrid1.DisplayLayout.Override.HotTrackRowCellAppearance.BackColor = Color.Yellow;
 this.ultraGrid1.DisplayLayout.Override.HotTrackHeaderAppearance.BackColor = Color.Blue;
 this.ultraGrid1.DisplayLayout.Override.HotTrackRowAppearance.ForeColor = Color.LightGreen;
 this.ultraGrid1.DisplayLayout.Override.HotTrackRowSelectorAppearance.BackColor = Color.Green;


分割滾動視圖
    設置分割視圖(創建SplitBar)
        this.ultraGrid1.DisplayLayout.ColScrollRegions[0].Split(0);
        this.ultraGrid1.DisplayLayout.RowScrollRegions[0].Split(200);
    取消分割視圖
        this.ultraGrid1.DisplayLayout.MaxColScrollRegions = 1;
     this.ultraGrid1.DisplayLayout.MaxRowScrollRegions = 1;


修改Tab鍵功能
    this.ultraGrid1.DisplayLayout.TabNavigation = TabNavigation.NextControl;


TabletPC Ink-Enable
    將UltraInkProvider 組件拖到窗體上就可以了
    編輯狀態的輸入框右側會顯示一個小筆按鈕,點擊後就會彈出手寫輸入框
    若要在非TabletPC上使用該功能,需要安裝TabletPC SDK

 

定義和應用外觀樣式
    this.ultraGrid1.DisplayLayout.Appearances.Add("Highlighted");
    this.ultraGrid1.DisplayLayout.Appearances["Highlighted"].BackColor = Color.Red;
    this.ultraGrid1.DisplayLayout.Appearances["Highlighted"].BackColor = Color.White;
    this.ultraGrid1.DisplayLayout.Override.ActiveRowAppearance  =  this.ultraGrid1.DisplayLayout.Appearances["Highlighted"];
    this.ultraGrid1.DisplayLayout.Override.RowSelectorAppearance = this.ultraGrid1.DisplayLayout.Appearances["Highlighted"];
    --------------------------
    this.ultraGrid1.DisplayLayout.Override.ActiveRowAppearance.BackColor = Color.Red;
    this.ultraGrid1.DisplayLayout.Override.ActiveRowAppearance.ForeColor = Color.White;
    this.ultraGrid1.DisplayLayout.Override.RowSelectorAppearance.BackColor = Color.Red;
    this.ultraGrid1.DisplayLayout.Override.RowSelectorAppearance.ForeColor = Color.White;
   
GroupBy 視圖
 this.ultraGrid1.DisplayLayout.ViewStyleBand = ViewStyleBand.OutlookGroupBy;
 this.ultraGrid1.DisplayLayout.Bands[0].SortedColumns.Add("Country", false, true);
 this.ultraGrid1.DisplayLayout.Bands[0].SortedColumns.Add("City", false, true);
    -------------------------------------------------------
    this.ultraGrid1.DisplayLayout.ViewStyleBand = ViewStyleBand.OutlookGroupBy;
    this.ultraGrid1.DisplayLayout.GroupByBox.Style = GroupByBoxStyle.Compact;
    this.ultraGrid1.DisplayLayout.GroupByBox.Appearance.BackColor = Color.White;
    this.ultraGrid1.DisplayLayout.GroupByBox.Prompt = "Drag and drop a column to group by

that column.";
    this.ultraGrid1.DisplayLayout.GroupByBox.PromptAppearance.ForeColor = Color.Maroon;
    this.ultraGrid1.DisplayLayout.GroupByBox.BorderStyle = UIElementBorderStyle.InsetSoft;
    this.ultraGrid1.DisplayLayout.GroupByBox.ButtonBorderStyle = UIElementBorderStyle.RaisedSoft;
    this.ultraGrid1.DisplayLayout.GroupByBox.ShowBandLabels = ShowBandLabels.All;
    this.ultraGrid1.DisplayLayout.GroupByBox.BandLabelBorderStyle = UIElementBorderStyle.Solid;
    this.ultraGrid1.DisplayLayout.GroupByBox.BandLabelAppearance.BackColor = Color.DarkBlue;
    this.ultraGrid1.DisplayLayout.GroupByBox.BandLabelAppearance.ForeColor = Color.LightYellow;
    this.ultraGrid1.DisplayLayout.GroupByBox.ButtonConnectorStyle = UIElementBorderStyle.Dotted;
    this.ultraGrid1.DisplayLayout.GroupByBox.ButtonConnectorColor = Color.Maroon;
   
卡片視圖
    grid.Band[0].CardView = true;
    grid.Band[0].CardSettings..... 樣式設置

展開所有行(子行)
    this.ultraGrid1.Rows.ExpandAll(true);

數據過濾器
    示例
     e.Layout.Override.AllowRowFiltering = DefaultableBoolean.True;
     e.Layout.Override.RowFilterAction = RowFilterAction.AppearancesOnly;
     e.Layout.Override.FilteredInCellAppearance.ForeColor = Color.DarkGreen;
     e.Layout.Override.FilteredOutCellAppearance.ForeColor = Color.DarkRed;
    打開過濾器
        this.ultraGrid1.DisplayLayout.Override.AllowRowFiltering = DefaultableBoolean.True;
    設置過濾器功能
        this.ultraGrid1.DisplayLayout.Override.RowFilterMode = RowFilterMode.AllRowsInBand;
        this.ultraGrid1.DisplayLayout.Override.FilterUIType = FilterUIType.FilterRow;
        this.ultraGrid1.DisplayLayout.Override.FilterEvaluationTrigger = FilterEvaluationTrigger.OnLeaveCell;
        this.ultraGrid1.DisplayLayout.Override.FilterOperatorDefaultValue = FilterOperatorDefaultValue.DoesNotContain;
        this.ultraGrid1.DisplayLayout.Override.FilterOperandStyle = FilterOperandStyle.DropDownList;
        this.ultraGrid1.DisplayLayout.Override.FilterOperatorLocation = FilterOperatorLocation.WithOperand;
        this.ultraGrid1.DisplayLayout.Override.FilterOperatorDropDownItems = FilterOperatorDropDownItems.All;
        this.ultraGrid1.DisplayLayout.Override.FilterClearButtonLocation = FilterClearButtonLocation.Row;
        this.ultraGrid1.DisplayLayout.Override.FilterRowPrompt = "Click here to filter rows...";
        this.ultraGrid1.DisplayLayout.Bands[0].SpecialRowPromptField = "Address";
        the LogicalOperator property of the ColumnFiltersCollection object.
    外觀
        ultraGrid1.DisplayLayout.Override.FilterRowAppearance
        ultraGrid1.DisplayLayout.Override.FilterRowAppearanceActive
        ultraGrid1.DisplayLayout.Override.FilterCellAppearance
        ultraGrid1.DisplayLayout.Override.FilterRowSelectorAppearance
    自定義過濾規則
        UltraGridBand band = this.ultraGrid1.DisplayLayout.Bands[2];
        band.ColumnFilters["Unit Price"].FilterConditions.Clear( );
        band.ColumnFilters["Unit Price"].FilterConditions.Add( FilterComparisionOperator.GreaterThan, 5 );
        band.ColumnFilters["Unit Price"].FilterConditions.Add( FilterComparisionOperator.LessThan, 10 );
        band.ColumnFilters["Unit Price"].LogicalOperator = FilterLogicalOperator.And;
               


數據錯誤提示
    this.ultraGrid1.DisplayLayout.Override.SupportDataErrorInfo = SupportDataErrorInfo.RowsAndCells;
    this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].SupportDataErrorInfo = DefaultableBoolean.False;
    this.ultraGrid1.DisplayLayout.Override.DataErrorCellAppearance.BackColor = Color.Red;
    this.ultraGrid1.DisplayLayout.Override.DataErrorRowSelectorAppearance.BackColor = Color.Red;
    this.ultraGrid1.DisplayLayout.Override.DataErrorRowAppearance.BackColor = Color.LightYellow;
    private void ultraGrid1_InitializeRow(object sender, InitializeRowEventArgs e)
    {
     string rowError = "";
     string cellError = "";
     Object value = e.Row.Cells["Fax"].Value;
     // Set the data error if Fax column value is empty
     if(DBNull.Value == value)
     {
      rowError = "Row contains errors.";
      cellError = "Fax can not be empty";
     }
   
     DataRowView drv = (DataRowView)e.Row.ListObject;
     drv.Row.RowError = rowError;
     drv.Row.SetColumnError("Fax", cellError);
    }


Tooltip
    SummarySettings averageSummary = e.Layout.Bands[0].Summaries.Add(
  "GradeAverage",
  SummaryType.Average,
  e.Layout.Bands[0].Columns["Grade"] );
    averageSummary.SummaryPosition = SummaryPosition.UseSummaryPositionColumn;
 averageSummary.SummaryPositionColumn = averageSummary.SourceColumn;
 averageSummary.DisplayFormat = "Average: {0:.##}";
 averageSummary.Band.Override.SummaryFooterCaptionVisible = DefaultableBoolean.False;
 averageSummary.Band.Override.BorderStyleSummaryFooter = UIElementBorderStyle.None;
    ----------------------------------------
 SummarySettings summary =
   this.ultraGrid1.DisplayLayout.Bands[0].Summaries.Add(
       "sum",
       SummaryType.Sum,
       this.ultraGrid1.DisplayLayout.Bands[0].Columns[0],
       SummaryPosition.UseSummaryPositionColumn );
 summary.ToolTipText = string.Format( "Sum of column {0}.",

summary.SourceColumn.Header.Caption );
 this.ultraGrid1.Rows.SummaryValues[ "sum" ].ToolTipText = string.Format( "Sum of

column {0}.", summary.SourceColumn.Header.Caption );
 

AlphaBend
 if(this.chkRowAlpha.Checked == true)
 {
  this.ultraGrid1.DisplayLayout.Override.RowAppearance.BackColorAlpha = Alpha.UseAlphaLevel;
  this.ultraGrid1.DisplayLayout.Override.RowAppearance.AlphaLevel = short.Parse(this.spnAlphaLevel.Value.ToString());
 }
 else
 {
  this.ultraGrid1.DisplayLayout.Override.RowAppearance.BackColorAlpha = Alpha.Opaque;
  this.ultraGrid1.DisplayLayout.Override.RowAppearance.AlphaLevel = 0;
 }
    ------------------------------------------
 if (chEnableAlphaBlending.Checked)
 {
  this.ultraGrid1.DisplayLayout.Appearance.ImageBackground  =

Image.FromFile(clsSamplesPath.GraphicsPath + "//Backgrounds//nasa_saturn_montage.jpg");
  this.ultraGrid1.DisplayLayout.Appearance.ImageBackgroundOrigin = Infragistics.Win.ImageBackgroundOrigin.Form;
  this.ultraGrid1.DisplayLayout.Appearance.ImageBackgroundStyle = Infragistics.Win.ImageBackgroundStyle.Tiled;

  this.ultraGrid1.AlphaBlendMode = Infragistics.Win.AlphaBlendMode.Optimized;

 }
 else
 {
  this.ultraGrid1.AlphaBlendMode = Infragistics.Win.AlphaBlendMode.Disabled;
  this.ultraGrid1.DisplayLayout.Appearance.ImageBackground = null;
 }
   

顯隱標題
 if (chShowCaption.Checked == true)
  this.ultraGrid1.Text = "UltraWinGrid CardView Sample";
 else
  this.ultraGrid1.Text = "";

邊框顯示
    ug.DisplayLayout.BorderStyle = Infragistics.Win.UIElementBorderStyle.Solid;

背景色
    ug.DisplayLayout.Appearance.BackColor = Color.White;
  

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ Band                                               ■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
設置數據條帶退格寬度
    this.ultraGrid1.DisplayLayout.Bands[1].Indentation = 100;


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ Caption                                            ■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
表格標題(Caption)
    this.ultraGrid1.DisplayLayout.CaptionVisible = DefaultableBoolean.True;
   
標題
    ug.DisplayLayout.CaptionAppearance.TextHAlign = Infragistics.Win.HAlign.Left;
    ug.DisplayLayout.CaptionAppearance.BackColor = Color.LightSteelBlue;


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ Head                                               ■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
控制標題行的位置
    // RepeatOnBreak, FixedOnTop, OncePerRowIsland, OncePerGroupedRowIsland
    e.Layout.Override.HeaderPlacement = HeaderPlacement.OncePerGroupedRowIsland;
 e.Layout.Bands[0].Override.HeaderPlacement = HeaderPlacement.FixedOnTop;

標題換行展示
    this.ultraGrid1.DisplayLayout.Override.WrapHeaderText = true;


Header置頂不動
    設置displaylayout中的stationarymargins
   

標題行樣式
    this.ultraGrid1.DisplayLayout.Override.AllowColSizing = AllowColSizing.Free;
    this.ultraGrid1.DisplayLayout.Bands[0].HeaderVisible = true;
    this.ultraGrid1.DisplayLayout.Bands[1].HeaderVisible = true;
    this.ultraGrid1.DisplayLayout.Bands[1].Header.Caption = "Orders";
    this.ultraGrid1.DisplayLayout.Bands[0].Indentation = 0;
    this.ultraGrid1.DisplayLayout.Bands[1].Indentation = 0;
    this.ultraGrid1.DisplayLayout.RowConnectorStyle = RowConnectorStyle.None;
    this.ultraGrid1.DisplayLayout.Bands[0].Header.Appearance.ThemedElementAlpha = Alpha.Transparent;
 this.ultraGrid1.DisplayLayout.Bands[0].Header.Appearance.BackColor = SystemColors.ActiveCaption;
 this.ultraGrid1.DisplayLayout.Bands[0].Header.Appearance.ForeColor =
SystemColors.ActiveCaptionText;
 this.ultraGrid1.DisplayLayout.Bands[1].Header.Appearance.ThemedElementAlpha = Alpha.Transparent;
 this.ultraGrid1.DisplayLayout.Bands[1].Header.Appearance.BackColor = Color.Blue;
 this.ultraGrid1.DisplayLayout.Bands[1].Header.Appearance.BackColor2 = Color.Red;
 this.ultraGrid1.DisplayLayout.Bands[1].Header.Appearance.ForeColor = Color.White;
 this.ultraGrid1.DisplayLayout.Bands[1].Header.Appearance.BackGradientStyle = GradientStyle.Horizontal;

隱藏標題行
    this.UltraGrid1.Text = "";
 

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ Row                                                ■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
行選擇方式
    e.Layout.Override.SelectTypeRow = SelectType.Single;
    e.DisplayLayout.Bands["Orders"].Override.SelectTypeRow = SelectType.Extended;
    e.Layout.Override.CellClickAction = CellClickAction.RowSelect;

選擇行樣式
    ug.DisplayLayout.Override.SelectedRowAppearance.BackColor = Color.SteelBlue;

交錯行樣式
    this.ultraGrid1.DisplayLayout.Override.RowAlternateAppearance.BackColor = Color.Red;

激活行樣式
    this.ultraGrid1.DisplayLayout.Override.ActiveRowAppearance.BackColor = Color.Red;
    ug.DisplayLayout.Override.ActiveRowAppearance.BackColor = Color.SteelBlue;


添加行操作提示
    private void ultraGrid1_InitializeLayout(object sender, InitializeLayoutEventArgs e)
    {
     this.ultraGrid1.DisplayLayout.Bands[0].AutoPreviewEnabled = true;
    }
    private void ultraGrid1_InitializeRow(object sender, InitializeRowEventArgs e)
    {
     e.Row.Description = "Row Description";
    }
    private void ultraGrid1_AfterRowInsert(object sender, RowEventArgs e)
    {
     this.ultraGrid1.DisplayLayout.ActiveRow.Description =
       "Data changed in this row will not be added to the database" +
       " until you press the Update button.";
    }
   
行漸變背景
 UltraGridRow objRow = this.ultraGrid1.Rows[10];
 this.ultraGrid1.ActiveRow = objRow;
 this.ultraGrid1.Rows[10].Appearance.BackColor2 = Color.Blue;
 this.ultraGrid1.Rows[10].Appearance.BackGradientStyle = GradientStyle.Circular;

 

修改特殊行的位置
    新增行
        this.ultraGrid1.DisplayLayout.Override.AllowAddNew = AllowAddNew.TemplateOnTop;
        this.ultraGrid1.DisplayLayout.Override.SequenceFixedAddRow = 2;
    過濾行
        this.ultraGrid1.DisplayLayout.Override.AllowRowFiltering = DefaultableBoolean.True;
        this.ultraGrid1.DisplayLayout.Override.FilterUIType = FilterUIType.FilterRow;
        this.ultraGrid1.DisplayLayout.Override.SequenceFilterRow = 1;
    統計行       
        this.ultraGrid1.DisplayLayout.Override.AllowRowSummaries = AllowRowSummaries.True;
        this.ultraGrid1.DisplayLayout.Override.SummaryDisplayArea = SummaryDisplayAreas.Top;
        this.ultraGrid1.DisplayLayout.Override.SequenceSummaryRow = 3;

行高度調整
    e.Layout.Override.DefaultRowHeight = 60;
    e.Layout.Override.RowSizing = RowSizing.Free;
    this.ultraGrid1.DisplayLayout.Override.RowSizing = RowSizing.Free;


行佈局(將列分組展示)
    ultraGrid1.DisplayLayout.Bands[0].Groups.Add("Name");
    ultraGrid1.DisplayLayout.Bands[0].Groups.Add("Address");
    ultraGrid1.DisplayLayout.Bands[0].Groups.Add("Phone");
    ultraGrid1.DisplayLayout.Bands[0].Columns["CompanyName"].Group  = 

ultraGrid1.DisplayLayout.Bands[0].Groups["Name"];
    ultraGrid1.DisplayLayout.Bands[0].Columns["ContactName"].Group  = 

ultraGrid1.DisplayLayout.Bands[0].Groups["Name"];
    ultraGrid1.DisplayLayout.Bands[0].Columns["ContactTitle"].Group = 

ultraGrid1.DisplayLayout.Bands[0].Groups["Name"];
    ultraGrid1.DisplayLayout.Bands[0].Columns["CustomerID"].Group   = 

ultraGrid1.DisplayLayout.Bands[0].Groups["Name"];
    ultraGrid1.DisplayLayout.Bands[0].Columns["Address"].Group      = 

ultraGrid1.DisplayLayout.Bands[0].Groups["Address"];
    ultraGrid1.DisplayLayout.Bands[0].Columns["Country"].Group      = 

ultraGrid1.DisplayLayout.Bands[0].Groups["Address"];
    ultraGrid1.DisplayLayout.Bands[0].Columns["City"].Group         = 

ultraGrid1.DisplayLayout.Bands[0].Groups["Address"];
    ultraGrid1.DisplayLayout.Bands[0].Columns["Region"].Group       = 

ultraGrid1.DisplayLayout.Bands[0].Groups["Address"];
    ultraGrid1.DisplayLayout.Bands[0].Columns["PostalCode"].Group   = 

ultraGrid1.DisplayLayout.Bands[0].Groups["Address"];
    ultraGrid1.DisplayLayout.Bands[0].Columns["Phone"].Group        = 

ultraGrid1.DisplayLayout.Bands[0].Groups["Phone"];
    ultraGrid1.DisplayLayout.Bands[0].Columns["Fax"].Group          = 

ultraGrid1.DisplayLayout.Bands[0].Groups["Phone"];
    ultraGrid1.DisplayLayout.Bands[0].LevelCount = 2;
    ultraGrid1.DisplayLayout.Bands[0].Columns["City"].Level = 1;
    ultraGrid1.DisplayLayout.Bands[0].Columns["Country"].Level = 1;
    ultraGrid1.DisplayLayout.Bands[0].Columns["PostalCode"].Level = 1;
    ultraGrid1.DisplayLayout.Bands[0].Columns["Fax"].Level = 1;

凍結行
    this.ultraGrid1.DisplayLayout.Override.FixedRowStyle = FixedRowStyle.Top;
    this.ultraGrid1.Rows.FixedRows.Add(this.ultraGrid1.Rows[0]);
    this.ultraGrid1.Rows[0].Fixed = true;
    this.ultraGrid1.DisplayLayout.Override.FixedRowIndicator = FixedRowIndicator.Button;
    FixedRowAppearance
    FixedRowCellAppearance
    FixedRowSelectorAppearance
   

統計行
 this.ultraGrid1.DisplayLayout.Override.AllowRowSummaries = AllowRowSummaries.True;
 this.ultraGrid1.DisplayLayout.Override.SummaryDisplayArea =

SummaryDisplayAreas.GroupByRowsFooter | SummaryDisplayAreas.TopFixed;
 ------------------------------------------------------
    this.ultraGrid1.DisplayLayout.Bands[0].Summaries.Add(
        SummaryType.Minimum,
        null,
        this.ultraGrid1.DisplayLayout.Bands[0].Columns["Country"],
        SummaryPosition.Left,
        null
        );
    this.ultraGrid1.DisplayLayout.Bands[0].Summaries[0].SummaryPosition =

SummaryPosition.Center; 
    this.ultraGrid1.DisplayLayout.Bands[0].SummaryFooterCaption = "My Sums";


行首顯示行號(行選擇器)
    e.Layout.Override.RowSelectors = DefaultableBoolean.True;
    e.Layout.Override.RowSelectorNumberStyle = RowSelectorNumberStyle.VisibleIndex;  
    e.Layout.Override.RowSelectorWidth = 30;

選中行
    this.ultraGrid1.Rows[i].Selected = true;

激活行
    this.ultraGrid1.Rows[i].Activate();
    this.ultraGrid1.ActiveRow = this.ultraGrid1.Rows[5];
    this.ultraGrid1.DisplayLayout.Override.ActiveRowAppearance.BackColor = Color.Aqua;
    this.ultraGrid1.ActiveCell = this.ultraGrid1.ActiveRow.Cells["CompanyName"];


遍歷行
    // 定位到首行
    UltraGridRow aRow = this.ultraGrid1.GetRow(ChildRow.First);
    // 搜索後繼行
    if(aRow.HasNextSibling())
    {
        UltraGridRow NextRow = aRow.GetSibling(SiblingRow.Next);
        MessageBox.Show("Has Siblings");
    }
    // 搜索子行
    if(aRow.HasChild())
    {
     UltraGridRow childRow = aRow.GetChild(Infragistics.Win.UltraWinGrid.ChildRow.First);
     MessageBox.Show("Has a Child");
    }

判斷總行數
    this.ultraGrid1.Rows.Count


       
特殊行外觀設置
    this.ultraGrid1.DisplayLayout.Override.SpecialRowSeparator = SpecialRowSeparator.FixedRows;
    this.ultraGrid1.DisplayLayout.Override.SpecialRowSeparatorHeight = 25;
    this.ultraGrid1.DisplayLayout.Override.BorderStyleSpecialRowSeparator = UIElementBorderStyle.Dashed;

隱藏行分隔線
 e.Layout.Reset();
 e.Layout.Override.CellAppearance.BorderAlpha = Alpha.Transparent;
 e.Layout.Override.RowAppearance.BorderColor = Color.White;
   

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ Column                                             ■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
UltraGrid內置支持的列編輯類型
    Default                     缺省類型
    Edit                        文本框
    EditButton                  按鈕文本框 
    CheckBox                    複選框 
    TriStateCheckBox            三態複選框 
    DropDown                    組合框(可編輯) 
    DropDownList                下拉框(只選)
    DropDownValidate            組合框(只可輸入列表中的數據)
    Button                      按鈕。點擊時觸發 ClickCellButton 事件
    DropDownCalendar            下拉日曆控件
    Date                        日期輸入、下拉日曆組合控件。可設置 MinValue 和 MaxValue,並對

輸入進行掩碼校驗
    DateWithoutDropDown         日期輸入 
    DateWithSpin                類似Date控件,但用spin按鈕取代了下拉日曆控件 
    DateTime                    日期時間輸入控件 
    DateTimeWithoutDropDown     日期時間輸入控件,但取消了下拉按鈕 
    DateTimeWithSpin            日期時間輸入控件,使用spin按鈕替代下拉按鈕 
    Color                       色彩選擇
    Currency                    金額,可修改 MaskInput 屬性定製mask 
    CurrencyNonNegative         金額,不允許負數
    CurrencyPositive            金額,只允許正數 
    Double                      double。可用 NumberFormatInfo 設置掩碼,用 MinValue MaxValue

限制範圍 
    DoubleWithSpin              double + spin
    DoubleNonNegative           double 非負 
    DoubleNonNegativeWithSpin   double 非負 spin
    DoublePositive              double 正數 
    DoublePositiveWithSpin      double 正數 spin
    Font                        字體選擇框
    Image                       圖像展示(EmbeddableImageRenderer)
    ImageWithShadow             圖像,陰影效果
    Integer                     整數 
    IntegerWithSpin             整數,spin 
    IntegerPositive             整數,正數 
    IntegerPositiveWithSpin     整數,正數,spin 
    IntegerNonNegative          整數,非負 
    IntegerNonNegativeWithSpin  整數,非負,spin 
    Time                        時間(可用MaskInput 設置掩碼,用 Minimum 和 maximum 設置範圍

) 
    TimeWithSpin                時間,spin 
    TimeZone                    時區 
    URL                         URL(FormattedLinkEditor)
    FormattedText               帶格式的文本(FormattedLinkEditor)

 

設置列編輯類型示例
    button
        this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Style = ColumnStyle.Button;
    checkbox
        this.ultraGrid1.DisplayLayout.Bands[0].Columns.Add("CheckBoxColumn");
        this.ultraGrid1.DisplayLayout.Bands[0].Columns["CheckBoxColumn"].DataType = typeof(bool);
        this.ultraGrid1.DisplayLayout.Bands[0].Columns["CheckBoxColumn"].Style = ColumnStyle.CheckBox;
    dropdownlist
        this.ultraGrid1.DisplayLayout.ValueLists.Add("List1");
        this.ultraGrid1.DisplayLayout.ValueLists["List1"].ValueListItems.Add(1, "One");
        this.ultraGrid1.DisplayLayout.ValueLists["List1"].ValueListItems.Add(2, "Two");
        this.ultraGrid1.DisplayLayout.ValueLists["List1"].ValueListItems.Add(3, "Three");
        this.ultraGrid1.DisplayLayout.ValueLists["List1"].DisplayStyle =

ValueListDisplayStyle.DisplayText;
        this.ultraGrid1.DisplayLayout.Bands[0].Columns[2].Style = ColumnStyle.DropDownList;
        this.ultraGrid1.DisplayLayout.Bands[0].Columns[2].ValueList = this.ultraGrid1.DisplayLayout.ValueLists["List1"];

手工設置單元格編輯控件
    EmbeddableEditorBase editor = null;
   DefaultEditorOwnerSettings editorSettings = new DefaultEditorOwnerSettings( );
    ---------------------------------------
 EditorWithText
     editorSettings.DataType = typeof( string );
     editor = new EditorWithText( new DefaultEditorOwner( editorSettings ) );
 ColorPickerEditor
     editorSettings.DataType = typeof( Color );
     editor = new ColorPickerEditor( new DefaultEditorOwner( editorSettings ) );
 FontNameEditor
     valueList = new ValueList( );
     editorSettings.DataType = typeof( string );
     for ( int i = 0; i < System.Drawing.FontFamily.Families.Length; i++ )
      valueList.ValueListItems.Add( System.Drawing.FontFamily.Families[i].Name );
     editorSettings.ValueList = valueList;
     editor = new FontNameEditor( new DefaultEditorOwner( editorSettings ) );
    ---------------------------------------
 EditorWithMarsk (Currency)
     editorSettings.DataType = typeof( decimal );
     editor = new EditorWithMask( new DefaultEditorOwner( editorSettings ) );
     editorSettings.MaskInput = "$ -nn,nnn,nnn.nn";
 EditorWithMask (double)
     editorSettings.DataType = typeof( double );
     editorSettings.MaskInput = "-nnnnnnnn.nnnn";
     editor = new EditorWithMask( new DefaultEditorOwner( editorSettings ) );  

 
 EditorWithMask(integers)
     editorSettings.DataType = typeof( int );
     editor = new EditorWithMask( new DefaultEditorOwner( editorSettings ) );
     editorSettings.MaskInput = "-nnnnnnnn";
 EditorWithMask(IPv4)
     editorSettings.DataType = typeof( string );
     editor = new EditorWithMask( new DefaultEditorOwner( editorSettings ) );
     editorSettings.MaskInput = "nnn//.nnn//.nnn//.nnn";
 EditorWithMask(phone numbers)
     editorSettings.DataType = typeof( string );
     editor = new EditorWithMask( new DefaultEditorOwner( editorSettings ) );
     editorSettings.MaskInput = "(###) ###-####";
 EditorWithMask (hh:mms:ss tt)
     editorSettings.DataType = typeof( DateTime );
     editorSettings.MaskInput = "hh:mm:ss tt";
     editor = new EditorWithMask( new DefaultEditorOwner( editorSettings ) );
    ---------------------------------------
 EditorWithCombo (Yes No dropdownlist)
     editorSettings.DataType = typeof( bool );
     valueList = new ValueList( );
     valueList.ValueListItems.Add( true, "Yes" );
     valueList.ValueListItems.Add( false, "No" );   
     editorSettings.ValueList = valueList;
     editor = new EditorWithCombo( new DefaultEditorOwner( editorSettings ) );
 EditorWithCombo (using ValueList)
     valueList = new ValueList( );
     valueList.ValueListItems.Add( 0, "Zero" );
     valueList.ValueListItems.Add( 1, "One" );
     valueList.ValueListItems.Add( 2, "Two" );
     valueList.ValueListItems.Add( 3, "Three" );
     valueList.ValueListItems.Add( 4, "Four" );
     valueList.ValueListItems.Add( 5, "Five" );
     editorSettings.ValueList = valueList;
     editorSettings.DataType = typeof( int );
     editor = new EditorWithCombo( new DefaultEditorOwner( editorSettings ) );
 EditorWithCombo (using UltraDropDown)
     // UltraDropDown : IValueList
     UltraDropDown dropDown = new UltraDropDown();
     dropDown.Visible = false;
     dropDown.DataSource = new Record[]{
         new Record("Cust 1"),
         new Record("Cust 2"),
         new Record("Cust 3"),
         new Record("Cust 4")
         };
     dropDown.ValueMember = "ID";     // Cell values of this column are used as data.
     dropDown.DisplayMember = "Data"; // Cell values of this column are dispalyed in the cells.
     dropDown.DisplayLayout.Override.CellAppearance.BackColor = Color.LightYellow;
     dropDown.DisplayLayout.Override.CellAppearance.BackColor2 = Color.Yellow;
     dropDown.DisplayLayout.Override.CellAppearance.BackGradientStyle = GradientStyle.ForwardDiagonal;
     this.Controls.Add(dropDown);
     //
     editorSettings.ValueList = dropDown;
     editorSettings.DataType = typeof( int );
     editor = new EditorWithCombo( new DefaultEditorOwner( editorSettings ) );
    ---------------------------------------
 OptionSetEditor
     editorSettings.DataType = typeof( bool );
     valueList = new ValueList( );
     valueList.ValueListItems.Add( true, "Yes" );
     valueList.ValueListItems.Add( false, "No" );   
     editorSettings.ValueList = valueList;
     editor = new OptionSetEditor( new DefaultEditorOwner( editorSettings ) );
    ---------------------------------------
 CheckEditor
     editorSettings.DataType = typeof( bool );
     editor = new CheckEditor( new DefaultEditorOwner( editorSettings ) );
 CheckEditor (ThreeState)
     editorSettings.DataType = typeof( bool );
     editor = new CheckEditor( new DefaultEditorOwner( editorSettings ) );
     ((CheckEditor)editor).ThreeState = true;
    ---------------------------------------
 DateTimeEditor
     editorSettings.DataType = typeof( DateTime );
     editorSettings.MaskInput = "mm/dd/yyyy";
     editor = new DateTimeEditor( new DefaultEditorOwner( editorSettings ) );
 DateTimeEditor (mm/dd/yy hh:mm:ss)
     editorSettings.DataType = typeof( DateTime );
     editorSettings.MaskInput = "mm/dd/yy hh:mm:ss";
     editor = new DateTimeEditor( new DefaultEditorOwner( editorSettings ) );
    ---------------------------------------
 ProgressBarEditor
     editorSettings.DataType = typeof( int );
     editor = new Infragistics.Win.UltraWinProgressBar.ProgressBarEditor( new

DefaultEditorOwner( editorSettings ) );

設置 FieldValue 列的控件
 private void ultraGrid2_InitializeRow(object sender,

Infragistics.Win.UltraWinGrid.InitializeRowEventArgs e)
 {
        string fieldType = e.Row.Cells["FieldType"].Text;
        EmbeddableEditorBase editor = ...
        e.Row.Cells[ "FieldValue" ].Editor = editor;
 }

列只讀
    e.Layout.Override.Rows["xxx"].CellActivation = CellActivation.NoEdit;

隱藏列
    this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Hidden = true;
   
凍結列
    this.ultraGrid1.DisplayLayout.UseFixedHeaders = true;
    this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Header.Fixed = true;
    this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Header.FixedHeaderIndicator =
FixedHeaderIndicator.None;
    this.ultraGrid1.DisplayLayout.Override.FixedHeaderAppearance.BackColor =
Color.LightYellow;
    this.ultraGrid1.DisplayLayout.Override.FixedCellAppearance.BackColor = Color.LightYellow;
    this.ultraGrid1.DisplayLayout.Override.FixedCellSeparatorColor = Color.Red;

展示列分隔線
 this.ultraGrid1.DisplayLayout.Override.CellAppearance.BorderColor = Color.Red;

列允許拖動和切換
    this.ultraGrid1.DisplayLayout.Override.AllowColMoving = AllowColMoving.WithinBand;
    this.ultraGrid1.DisplayLayout.Override.AllowColSwapping = AllowColSwapping.WithinBand;

列寬調整
    e.Layout.AutoFitStyle = AutoFitStyle.ExtendLastColumn;
    e.Layout.Override.AllowColSizing = AllowColSizing.Free;
    this.ultraGrid1.DisplayLayout.Override.ColumnAutoSizeMode = ColumnAutoSizeMode.VisibleRows;
    this.ultraGrid1.DisplayLayout.Bands[1].Override.ColumnAutoSizeMode = ColumnAutoSizeMode.AllRowsInBand;
    this.ultraGrid1.Rows[0].PerformAutoSize( );

遍歷列
    grid.Layout.Bands[0].Columns.FromKey("Key")
    foreach ( UltraGridColumn column in e.Layout.Bands[0].Columns )
        column.Width = 100;

判斷某列是否重複
    public static bool CheckIfSame(UltraGrid ug, string colname)
    {
        for(int i = 0; i < ug.Rows.Count; i++)
        {
            for(int j = i+1; j < ug.Rows.Count; j++)
                if(ug.Rows[i].Cells[colname].Text == ug.Rows[j].Cells[colname].Text && ug.Rows[i].Cells[colname].Text != "")
                    return true;
        }
        return false;
    }

添加非綁定列
    this.ultraGrid1.DisplayLayout.Bands[0].Columns.Add("CalculatedColumn", "Calculated Value");

獲取子數據條帶個數
    private int GetNumberofChildBands(Infragistics.Win.UltraWinGrid.UltraGridBand aBand)
    {
        int GetNumberofChildBands = 0;
        foreach(UltraGridColumn aCol in aBand.Columns)
        {
            if(aCol.IsChaptered)
                GetNumberofChildBands = GetNumberofChildBands + 1;
        } 
        return GetNumberofChildBands;
    }


不同值可以給以不同的顏色。
    Properties-> DisplayLayout->bands->0-XXX->Columns->從彈出窗口中,選擇一個列-

>ValueBaseAppearance->添加Conditions,即可。


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ Cell                                               ■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
選中單元格樣式
    ug.DisplayLayout.Override.SelectedCellAppearance.BackColor = Color.SteelBlue;//選中單元格

單元格選擇方式
    e.Layout.Override.SelectTypeCell = SelectType.Single;


單元格格式
    private void ultraGrid1_InitializeLayout(object sender, InitializeLayoutEventArgs e)
    {
     // Fit columns
     e.Layout.AutoFitStyle = AutoFitStyle.ExtendLastColumn;
   
     // Create culture objects
     CultureInfo cultureENUS = CultureInfo.CreateSpecificCulture("en-us");
     CultureInfo cultureDEDE = CultureInfo.CreateSpecificCulture("de-de");
     CultureInfo cultureJAJP = CultureInfo.CreateSpecificCulture("ja-jp");
   
     // Set date formats
     e.Layout.Bands[0].Columns["OrderDate"].Format = "d";
     e.Layout.Bands[0].Columns["OrderDate"].FormatInfo = cultureENUS;
     e.Layout.Bands[0].Columns["RequiredDate"].Format = "d";
     e.Layout.Bands[0].Columns["RequiredDate"].FormatInfo = cultureDEDE;
     e.Layout.Bands[0].Columns["ShippedDate"].Format = "d";
     e.Layout.Bands[0].Columns["ShippedDate"].FormatInfo = cultureJAJP;
    }


文字過長的裁剪展示方式
    this.ultraGrid1.DisplayLayout.Override.CellAppearance.TextTrimming = TextTrimming.EllipsisCharacter;

   
   
修改單元格背景
    void UltraGrid1_AfterCellUpdate(...)
    {
        if(e.Cell.Column.Key == "Column_5")
        {
         int cellValue = (int)e.Cell.Value;
         if(cellValue == 100)
         {
          e.Cell.Appearance.BackColor = System.Drawing.Color.Red;
         }
         else
          e.Cell.Appearance.BackColor = System.Drawing.Color.White;
        }   
    }


單元格背景圖片
    private void ultraGrid1_InitializeLayout(object sender, InitializeLayoutEventArgs e)
    {
     this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].CellAppearance.ImageBackground =
       Image.FromFile(System.IO.Path.Combine(
         Application.StartupPath, @"../../ExtraFiles/Find in Field.bmp"));
    }

單元格按鈕樣式
 this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Style = ColumnStyle.Button;
 this.ultraGrid1.DisplayLayout.Override.CellButtonAppearance.Image =
   Image.FromFile(System.IO.Path.Combine(
     Application.StartupPath, @"../../ExtraFiles/Find in Field.bmp"));
 this.ultraGrid1.DisplayLayout.Bands[0].Override.ButtonStyle =

UIElementButtonStyle.Button3D;


多行單元格
    this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].CellMultiLine = DefaultableBoolean.True;
    this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].VertScrollBar = true;
    this.ultraGrid1.DisplayLayout.Override.DefaultRowHeight = 100;

單元格點擊處理方式
    this.ultraGrid1.DisplayLayout.Override.CellClickAction = CellClickAction.EditAndSelectText;

 
單元格值和鍵
    this.ultraGrid1.Rows[0].Cells["字段名"].Value    // 單元格的值
    cell.Column.Key                                  // 單元格歸屬的列的鍵
    this.ultraGrid1.Selected.Cells;                  // 被選中單元格

下拉框單元格
    手工設置
        在Properties-> DisplayLayout->ValueLists,添加ValueList
        Properties-> DisplayLayout->bands->0-XXX->Columns->某個Column->ValueList等於新添加的ValueList,同時設定Style是DropDown
        還要再寫個Event Handler,詳細其他Style等等可以看這個Link:
        http://devcenter.infragistics.com/Support/KnowledgeBaseArticle.Aspx?ArticleID=1708
    代碼設置
        ValueList locValueList = this.ultraGrid.DisplayLayout.ValueLists.Add("Locs");
        foreach (DataRow dr in m_ds.Tables["Loc"].Rows)
            locValueList.ValueListItems.Add((int)(dr["ID"]), dr["Name"].ToString());
        ultraGrid.DisplayLayout.Bands["Customer"].Columns["LocID"].ValueList =

ultraGrid.DisplayLayout.ValueLists["Locs"];
    ValueList 示例
        ultraGrid1.DisplayLayout.ValueLists.Add("List1");
        ultraGrid1.DisplayLayout.ValueLists["List1"].ValueListItems.Add(1, "One");
        ultraGrid1.DisplayLayout.ValueLists["List1"].ValueListItems.Add(2, "Two");
        ultraGrid1.DisplayLayout.ValueLists["List1"].ValueListItems.Add(3, "Three");
        ultraGrid1.DisplayLayout.ValueLists["List1"].DisplayStyle = ValueListDisplayStyle.DisplayText;
        ultraGrid1.DisplayLayout.Bands[0].Columns.Add("Notes");
        ultraGrid1.DisplayLayout.Bands[0].Columns["Notes"].ValueList = this.ultraGrid1.DisplayLayout.ValueLists["List1"];
        ultraGrid1.DataBind();

 

設置特定單元格處於編輯狀態
    this.ultraGrid1.ActiveCell = this.ultraGrid1.ActiveRow.Cells["CompanyName"];
    this.ultraGrid1.Focus();
    this.ultraGrid1.PerformAction(UltraGridAction.EnterEditMode, false, false);

合併單元格
    合併具有相同值的單元格
        this.ultraGrid1.DisplayLayout.Override.MergedCellStyle = MergedCellStyle.Always;
        this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].MergedCellStyle = MergedCellStyle.Never;
    合併單元格外觀設置
        this.ultraGrid1.DisplayLayout.Override.MergedCellAppearance.BackColor = Color.LightYellow;
        this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].MergedCellAppearance.BackColor = Color.Blue;
    合併邏輯:文本一致就可以合併
        this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].MergedCellEvaluationType = MergedCellEvaluationType.MergeSameText;
    定製單元格合併邏輯
        private void ultraGrid1_InitializeLayout(object sender, Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs e)
        {
         e.Layout.Override.MergedCellStyle = MergedCellStyle.Always;
         e.Layout.Bands[0].Columns["ShippedDate"].MergedCellEvaluator = new CustomMergedCellEvaluator();
        }
        public class CustomMergedCellEvaluator: Infragistics.Win.UltraWinGrid.IMergedCellEvaluator
        {
         public CustomMergedCellEvaluator(){}
            // 合併日期相同的單元格(無需時間精確相同)
         public bool ShouldCellsBeMerged(UltraGridRow row1, UltraGridRow row2, UltraGridColumn column)
         {
          DateTime date1 = (DateTime)row1.GetCellValue(column);
          DateTime date2 = (DateTime)row2.GetCellValue(column);
          return date1.Date == date2.Date;
         }
        }
       
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ 自定義單元格編輯控件                               ■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
EmbeddableEditorBase

       
       
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ FULL EXAMPLE                                       ■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    //
    // UltraDataColumns
    //
    UltraDataColumn ultraDataColumn1 = new UltraDataColumn("BidId");
    UltraDataColumn ultraDataColumn2 = new UltraDataColumn("BidPaperId");
    UltraDataColumn ultraDataColumn3 = new UltraDataColumn("BidCompanyName");
    UltraDataColumn ultraDataColumn4 = new UltraDataColumn("BidMoney");
    UltraDataColumn ultraDataColumn5 = new UltraDataColumn("ValidBidMoney");
    UltraDataColumn ultraDataColumn6 = new UltraDataColumn("ValidBidRank");
    UltraDataColumn ultraDataColumn7 = new UltraDataColumn("ValidBidRemark");
    UltraDataColumn ultraDataColumn8 = new UltraDataColumn("MoneyScore");
    UltraDataColumn ultraDataColumn9 = new UltraDataColumn("PaperScore");
    UltraDataColumn ultraDataColumn10 = new UltraDataColumn("BusinessScore");
    ultraDataColumn1.DataType = typeof(int);
    ultraDataColumn2.DataType = typeof(int);
    ultraDataColumn5.DataType = typeof(double);
    ultraDataColumn8.DataType = typeof(double);
    ultraDataColumn9.DataType = typeof(double);
    ultraDataColumn10.DataType = typeof(double);
   
    //
    // UltraDataSource
    //
    this.ultraDataSource = new Infragistics.Win.UltraWinDataSource.UltraDataSource(this.components);
    this.ultraDataSource.Band.Columns.AddRange(new object[] {
        ultraDataColumn1,
        ultraDataColumn2,
        ultraDataColumn3,
        ultraDataColumn4,
        ultraDataColumn5,
        ultraDataColumn6,
        ultraDataColumn7,
        ultraDataColumn8,
        ultraDataColumn9,
        ultraDataColumn10});
   
    //
    // UltraGridColumns
    //
    UltraGridColumn ultraGridColumn1 = new UltraGridColumn("BidId");
    UltraGridColumn ultraGridColumn2 = new UltraGridColumn("BidPaperId");
    UltraGridColumn ultraGridColumn3 = new UltraGridColumn("BidCompanyName");
    UltraGridColumn ultraGridColumn4 = new UltraGridColumn("BidMoney");
    ultraGridColumn1.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
    ultraGridColumn1.Header.VisiblePosition = 0;
    ultraGridColumn1.Hidden = true;
    ultraGridColumn2.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
    ultraGridColumn2.Header.Caption = "編號";
    ultraGridColumn2.Header.VisiblePosition = 1;
    ultraGridColumn2.Hidden = true;
    ultraGridColumn3.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
    ultraGridColumn3.Header.Caption = "投標公司";
    ultraGridColumn3.Header.Fixed = true;
    ultraGridColumn3.Header.VisiblePosition = 2;
    ultraGridColumn3.Width = 159;
    ultraGridColumn4.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
    ultraGridColumn4.Header.Caption = "投標金額(萬元)";
    ultraGridColumn4.Header.VisiblePosition = 3;
    ultraGridColumn4.Width = 108;

    //
    // UltraGridBand
    //
    UltraGridBand ultraGridBand1 = new UltraGridBand("Band 0", -1);
    ultraGridBand1.Columns.AddRange(new object[] {
        ultraGridColumn1,
        ultraGridColumn2,
        ultraGridColumn3,
        ultraGridColumn4
    });

    //
    // UltraGrid
    //
    this.grid = new Infragistics.Win.UltraWinGrid.UltraGrid();
    this.grid.DataSource = this.ultraDataSource;
    this.grid.DisplayLayout.AutoFitStyle = Infragistics.Win.UltraWinGrid.AutoFitStyle.ExtendLastColumn;

 

 

 

UltraWinGrid Designer(UltraGrid設計器項目)
    Basic Settings                            :
        Data Schema                           : 設置綁定列的數據格式
        Presets                               : 從預設中選擇一個樣式,有三種類型:(1)僅與外觀相關;(2)僅與行爲相關;(3)兩者都有
            Manage Presets                    : 預設管理和設置
        Feature Picker                        : 配置功能。詳見後
        Appearance Browser                    : 定製的一些外觀樣式
    Band and Column Settings                  : 要展示數據集和列設置
        Band[0] - 'Band 0'                    :
            Columns                           : 展示列設置:Data Schema中定義綁定列,非綁定列
            Column Arrangement Overview       : 列展示位置設置(類似報表設計器)
                Column Arrangement Designer   : 分兩種:Row layout(可用於複雜表頭設置), Group and levels
    Control Settings                          : 控件所有的屬性設置。其實上面的所有設置都可以在這裏找到,只是層次深不易找。詳見下。
   
Feature Picker(UltraGrid功能設置)
    AutoFit Style               : 列自動適應寬度
    CardView                    : 卡片視圖
    Column Moving               : 列是否可拖動位置
    Column Sizing               : 列調整寬度的方式
    Column Swapping             : 是否允許列交換位置
    Empty Rows                  : 是否展示空行,空行的樣式
    Filtering                   : 列過濾器
    Fixed Headers               : 凍結列
    Fixed Rows                  : 凍結行
    Header Click Sort Action    : 標題列點擊排序方式:單列排序 & 多列方式
    IDataErrorInfo Support      : 數據錯誤驗證方式
    Merged Cell                 : 合併單元格
    Outlook Group By            : Outlook Group 風格(可由用戶定製數據分組)
    Row Selectors               : 行選擇符號(一個小箭頭)
    Row Siziing                 : 行調整高度的方式
    Scrolling                   : 滾動條樣式
    Selection                   : 行列單元格選擇方式
    Summaries                   : 統計單元格
    Updating                    : 是否允許數據行增刪改

Control Setting(UltraGrid控件設置·特有屬性)
    Appearance
    Behavior
    Data
    Design
    Layout
        DiaplayLayout
            AddNewBox
            AutoFitStyle
            Bands
            EnmptyRowSettings
            Override
                AllowAddNew
                AllowDelete
                AllowUpdate
                RowSizing
            ViewStyle               : SingleBand | MultiBand
    雜項
   
常用操作
    添加Column: Start/Basic Settings/Data Schema/Manually Define a Schema/添加Column,命名用數據庫中的字段名。
    添加Column Title: Band and Column Settings/Band [0](手動添加Column後)/Columns/選擇列/Header/修改Caption屬性
    排序:Picker/Filtring/Allow
    分組:Picker/OutLook GroupBy/Active
    編輯:Picker/Update
    多行表頭:Column Arrangement Designer/Add Group/Add Level/把相應的列拖到組下面,
    隱藏列:Column Arrangement Designer/Show Hide
    單列不可編輯:Band[0]/Column/cellactivation 設置成NoEdit
    單擊單元格選擇狀態:Band[0]/Column/CellClickAction
    單元格編輯控件:Band[0]/Column/EditorControl
    單元格合併:Band[0]/Column/MergedCell。。。
    凍結列:Picker/Fixed Header

 

 

UltraGrid的屬性設計和一般的控件頗爲不同。理解其設計思想,有助於你從其浩瀚的屬性中快速找到你所需要的東西。在此文中 WinGrid, UltraGrid, UltraWinGrid 是同一個東西。


WinGrid
    是一個可展示層級數據的網格控件
    數據源實現 IList 或 ITypedList 接口就可以展示(但不一定可以增刪)
    可展現具有層級關係的數據,如 customers - orders - order details
       
WinGrid 功能:
    · 排序
    · 過濾
    · 統計
    · 行列大小調整
    · 凍結列和凍結行
    · 列託拽調整位置
    · 列互換位置
    · 分割視圖
    · Outlook風格的BroupBy功能(用戶可將列拖到分組欄中對數據進行分組)
    · 卡片視圖
    · 數據行的自定義佈局
    · 單元格可使用多種編輯控件
    · 導出到Excel
    · 打印
    · 其它Infragistics Presentation Layer Framework 的公共特性,如:Apperances, DrawFilters, CreationFilters

WinGrid 數據條帶和層級數據
    UltraGrid 可表現具有層級關係的數據
    每個層級的數據用一個 band(數據條帶)來描述
    每個 band 具有若干的 column 和 row,類似 DataTable
    層級間的關係用外鍵關聯來描述


WinGrid 的外觀樣式方案
    (1)使用 Appearance 對象控制控件的外觀和樣式
        設置 WinGrid 控件的外觀
            · 並不直接設置其字體背景顏色等屬性
            · 而是創建或者選擇現有的 Appearance 對象(類似Web的css class樣式)
            · 該 Appearance 對象擁有多種格式相關的屬性,如對齊方式、字體、顏色、圖像和alpha融合信息
        該方式有以下好處:
            · 縮減了代碼的數量
            · 便於控制統一的外觀,只需要改 Appearance 對象就可以了
            · 對於 Grid 這樣具有衆多子元素的控件,使用此方式設置外觀可有效減少內存消耗
   
    (2)其佈局和外觀是可持續化保存的
        UltraGrid.DisplayLayout 屬性(UltraGridLayout類)作爲所有可持續化保存的特性和對象的容器
        調用該對象的 Load(), Save(), LoadFromXml(), SaveAsXml() 函數可存取外觀控制
        由於大部分UltraGrid的設置都可以持續化,所以大部分的功能都是通過UltraGridLayout對象進行設置的
   
    (3)樣式是可從上級控件繼承和重載的
        若控件設置其 Appearance 爲 Default,該控件將會繼承其父控件的樣式設置(而不是什麼缺省值)
            如缺省狀態下,cell 使用row的背景色,而row使用band的背景色
            Band 對象默認繼承上級對象的樣式,而使用Override 屬性(UltraGridOverride 類)來設置其特殊屬性
        WinGrid 決定繪製一個對象的外觀和行爲時
            · 先檢查該對象的Override屬性
            · 若該屬性內的值被明確修改(非Default),則使用該值
            · 否則使用上級對象相應的值(Default)
        大部分的屬性即可以直接在WinGrid設置,也可以在Band設置,後者會覆蓋前者
            // 例:默認只能單行選擇,而 orders band 允許選擇多行
            using Infragistics.Win.UltraWinGrid;
            UltraGrid1.DisplayLayout.Override.SelectTypeRow = SelectType.Single;
            UltraGrid1.DisplayLayout.Bands["Orders"].Override.SelectTypeRow = SelectType.Extended;

卡片視圖(Card View)
    每條記錄用一張卡片來展示,類似表單視圖
    卡片視圖的限制
        只能展現最底層的band數據,無法再展示其子層的數據
        無法增加新記錄?
    設置方法
        grid.Band[0].CardView = true;
        grid.Band[0].CardSettings..... 樣式設置
   

分組視圖(GroupBy View)
    類似outlook 2007,可將列拖到分組欄中,讓數據分組展示
    操作方法:
        grid.DisplayLayout.ViewStyleBand = ViewStyleBand.OutlookGroupBy;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章