四、UltraGrid 数据绑定
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ 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;
}
}
五、UltraGrid 绑定到 IList 示例
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("输入数据的格式不正确,请校验");
}
}
}
六、UltraGrid 事件处理
■■■■■■■■■■■■■■■■■■■■■■■■■
■■ 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();
}
七、UltraGrid Actions
■■■■■■■■■■■■■■■■■■■■■■■■■
■■ 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];
}