文章參考: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;
}
■■■■■■■■■■■■■■■■■■■■■■■■ 當前單元格變動事件 上滾一行 // Look to see if this row has a Previous Sibling // Look to see if this row has a Parent 下滾一行 // Look to see if this row has a next sibling // Look for next sibling of parent if(aRow != null) 滾到最後一行
■■■■■■■■■■■■■■■■■■■■■■■■
■■ 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;
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;
}
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;
}
if(aRow.HasNextSibling() == true)
{
aRow = aRow.GetSibling(SiblingRow.Next);
this.ultraGrid1.ActiveRow = aRow;
return;
}
aRow = aRow.ParentRow;
if(aRow != null)
{
if(aRow.HasNextSibling() == true)
{
aRow = aRow.GetSibling(SiblingRow.Next);
this.ultraGrid1.ActiveRow = aRow;
return;
}
}
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;
private void BidCompanyForm_Load(object sender, EventArgs e) private void ultraDataSource_RowDeleting(object sender, RowDeletingEventArgs e) private void ultraDataSource_CellDataUpdating(object sender, CellDataUpdatingEventArgs e) private void grid_AfterCellUpdate(object sender, CellEventArgs e) private void grid_BeforeRowsDeleted(object sender, BeforeRowsDeletedEventArgs e) private void grid_CellDataError(object sender, CellDataErrorEventArgs e)
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();
}
{
}
//-----------------------------------------------------
// ultraDataSource
//-----------------------------------------------------
private void ultraDataSource_RowAdding(object sender, RowAddingEventArgs e)
{
BidPaper paper = new BidPaper();
paper.BidId = _bid.BidId;
_list.Add(paper);
}
{
(_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;
}
}
{
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;
}
{
//BidPaper paper = _list[e.Cell.Row.Index] as BidPaper;
//paper.Persist();
}
{
e.DisplayPromptMsg = false;
e.Cancel = (DialogResult.Yes != MessageBox.Show("確定刪除該記錄?", "刪除", MessageBoxButtons.YesNo));
}
{
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"));
使用操作系統樣式 HotTrack 定義和應用外觀樣式 that column."; 展開所有行(子行) 數據過濾器 summary.SourceColumn.Header.Caption ); column {0}.", summary.SourceColumn.Header.Caption ); AlphaBend Image.FromFile(clsSamplesPath.GraphicsPath + "//Backgrounds//nasa_saturn_montage.jpg"); this.ultraGrid1.AlphaBlendMode = Infragistics.Win.AlphaBlendMode.Optimized; } 顯隱標題 邊框顯示 背景色 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 標題換行展示 標題行樣式 隱藏標題行 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 選擇行樣式 交錯行樣式 激活行樣式 修改特殊行的位置 行高度調整 ultraGrid1.DisplayLayout.Bands[0].Groups["Name"]; ultraGrid1.DisplayLayout.Bands[0].Groups["Name"]; ultraGrid1.DisplayLayout.Bands[0].Groups["Name"]; ultraGrid1.DisplayLayout.Bands[0].Groups["Name"]; ultraGrid1.DisplayLayout.Bands[0].Groups["Address"]; ultraGrid1.DisplayLayout.Bands[0].Groups["Address"]; ultraGrid1.DisplayLayout.Bands[0].Groups["Address"]; ultraGrid1.DisplayLayout.Bands[0].Groups["Address"]; ultraGrid1.DisplayLayout.Bands[0].Groups["Address"]; ultraGrid1.DisplayLayout.Bands[0].Groups["Phone"]; ultraGrid1.DisplayLayout.Bands[0].Groups["Phone"]; 凍結行 統計行 SummaryDisplayAreas.GroupByRowsFooter | SummaryDisplayAreas.TopFixed; SummaryPosition.Center; 選中行 激活行 判斷總行數 隱藏行分隔線 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 輸入進行掩碼校驗 限制範圍 ) 設置列編輯類型示例 ValueListDisplayStyle.DisplayText; 手工設置單元格編輯控件 DefaultEditorOwner( editorSettings ) ); 設置 FieldValue 列的控件 Infragistics.Win.UltraWinGrid.InitializeRowEventArgs e) 列只讀 隱藏列 展示列分隔線 列允許拖動和切換 列寬調整 遍歷列 判斷某列是否重複 添加非綁定列 獲取子數據條帶個數 >ValueBaseAppearance->添加Conditions,即可。 單元格選擇方式 單元格按鈕樣式 UIElementButtonStyle.Button3D; 單元格點擊處理方式 下拉框單元格 ultraGrid.DisplayLayout.ValueLists["Locs"]; 設置特定單元格處於編輯狀態 合併單元格 // //
使用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;
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
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}.",
this.ultraGrid1.Rows.SummaryValues[ "sum" ].ToolTipText = string.Format( "Sum of
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 =
this.ultraGrid1.DisplayLayout.Appearance.ImageBackgroundOrigin = Infragistics.Win.ImageBackgroundOrigin.Form;
this.ultraGrid1.DisplayLayout.Appearance.ImageBackgroundStyle = Infragistics.Win.ImageBackgroundStyle.Tiled;
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].Columns["ContactName"].Group =
ultraGrid1.DisplayLayout.Bands[0].Columns["ContactTitle"].Group =
ultraGrid1.DisplayLayout.Bands[0].Columns["CustomerID"].Group =
ultraGrid1.DisplayLayout.Bands[0].Columns["Address"].Group =
ultraGrid1.DisplayLayout.Bands[0].Columns["Country"].Group =
ultraGrid1.DisplayLayout.Bands[0].Columns["City"].Group =
ultraGrid1.DisplayLayout.Bands[0].Columns["Region"].Group =
ultraGrid1.DisplayLayout.Bands[0].Columns["PostalCode"].Group =
ultraGrid1.DisplayLayout.Bands[0].Columns["Phone"].Group =
ultraGrid1.DisplayLayout.Bands[0].Columns["Fax"].Group =
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 =
------------------------------------------------------
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 =
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 =
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
private void ultraGrid2_InitializeRow(object sender,
{
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->從彈出窗口中,選擇一個列-
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ 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 =
多行單元格
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 =
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;