转:Infragistics netadvantage UltraGrid (UltraWinGrid) 编程手记(2)

四、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];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值