您的位置:首页 > 其它

[转贴]xtragrid的使用

2008-06-09 01:40 127 查看
提交当前行的修改

using DevExpress.XtraGrid;

using DevExpress.XtraGrid.Views.Base;

using System.Data.Common;

//...

public void UpdateDatasource(GridControl grid) {

//Save the latest changes to the bound DataTable

ColumnView view = (ColumnView)grid.FocusedView;

view.CloseEditor();

if(!view.UpdateCurrentRow()) return;

//Update the database's Suppliers table to which oleDBDataAdapter1 is connected

DoUpdate(oleDbDataAdapter1, dataSet11.Tables["Suppliers"]);

//Update the database's Products table to which the oleDbDataAdapter2 is connected

DoUpdate(oleDbDataAdapter2, dataSet11.Tables["Products"]);

}

public void DoUpdate(DbDataAdapter dataAdapter, System.Data.DataTable dataTable) {

try {

dataAdapter.Update(dataTable);

} catch(Exception ex) {

MessageBox.Show(ex.Message);

}

}

从非绑定数据源得到数据

private void Form1_Load(object sender, System.EventArgs e) {

// ...

// Create an unbound column.

GridColumn unbColumn = gridView1.Columns.Add("Total");

unbColumn.VisibleIndex = gridView1.Columns.Count;

unbColumn.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;

// Disable editing.

unbColumn.OptionsColumn.AllowEdit = false;

// Specify format settings.

unbColumn.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric;

unbColumn.DisplayFormat.FormatString = "c";

// Customize the appearance settings.

unbColumn.AppearanceCell.BackColor = Color.LemonChiffon;

}

// Returns the total amount for a specific row.

decimal getTotalValue(ColumnView view, int rowHandle) {

decimal unitPrice = Convert.ToDecimal(view.GetRowCellValue(rowHandle, "UnitPrice"));

decimal quantity = Convert.ToDecimal(view.GetRowCellValue(rowHandle, "Quantity"));

decimal discount = Convert.ToDecimal(view.GetRowCellValue(rowHandle, "Discount"));

return unitPrice * quantity * (1 - discount);

}

// Provides data for the Total column.

private void gridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e) {

if(e.Column.FieldName == "Total" && e.IsGetData) e.Value = getTotalValue(sender as ColumnView, e.RowHandle);

}

运行时绑定到实现Ilist接口的数据源

public class Record {

int id, age;

string name;

public Record(int id, string name, int age) {

this.id = id;

this.name = name;

this.age = age;

}

public int ID { get { return id; } }

public string Name {

get { return name; }

set { name = value; }

}

public int Age {

get { return age; }

set { age = value; }

}

}

ArrayList listDataSource = new ArrayList();

listDataSource.Add(new Record(1, "Jane", 19));

listDataSource.Add(new Record(2, "Joe", 30));

listDataSource.Add(new Record(3, "Bill", 15));

listDataSource.Add(new Record(4, "Michael", 42));

gridControl1.DataSource = listDataSource;

gridControl1.MainView.PopulateColumns();

自定义列:

[C#]

DevExpress.XtraGrid.Views.Base.ColumnView view = gridControl1.MainView as DevExpress.XtraGrid.Views.Base.ColumnView;

DialogResult answer = MessageBox.Show("Do you want to create columns for all fields?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (answer == DialogResult.Yes)

view.PopulateColumns();

else {

string[] fieldNames = new string[] {"ProductID", "ProductName", "QuantityPerUnit", "UnitPrice"};

DevExpress.XtraGrid.Columns.GridColumn column;

view.Columns.Clear();

for (int i = 0; i < fieldNames.Length; i++) {

column = view.Columns.Add(fieldNames[i]);

column.VisibleIndex = i;

}

}

GridColumn主要属性

Property

Description

GridColumn.Name

设计时定义的列名

GridColumn.FieldName

绑定到的数据源中的列名

GridColumn.AbsoluteIndex

在grid中的绝对位置索引

GridColumn.ColumnHandle

指定关联数据源列名的标识,它不一定是唯一的,因为一个数据源列可以关联到一个Grid中的多个列.

手动创建Band

// obtaining the main view and clearing its bands collection

BandedGridView view = gridControl1.MainView as BandedGridView;

view.Bands.Clear();

// creating the bands layout

GridBand bandGeneral = view.Bands.Add("General Info");

GridBand bandTechnical = view.Bands.Add("Technical Info");

GridBand bandEngine = bandTechnical.Children.Add("Engine Info");

GridBand bandTransmission = bandTechnical.Children.Add("Transmission Info");

// assigning columns to bands

colTrademark.OwnerBand = bandGeneral;

colModel.OwnerBand = bandGeneral;

colLiter.OwnerBand = bandEngine;

colCylinders.OwnerBand = bandEngine;

colSpeedCount.OwnerBand = bandTransmission;

colTransmission.OwnerBand = bandTransmission;

如何定位和查找指定列显示值的行(注意是列的实显示值,而不是关联数据源列值)

using DevExpress.XtraGrid.Views.Base;

using DevExpress.XtraGrid.Columns;

// ...

string searchText = "Japan";

// obtaining the focused view

ColumnView view = (ColumnView)gridControl1.FocusedView;

// obtaining the column bound to the Country field

GridColumn column = view.Columns["Country"];

if(column != null) {

// locating the row

//如果用数据源中的列值,请用ColumnView.LocateByValue

int rhFound = view.LocateByDisplayText(view.FocusedRowHandle + 1, column, searchText);

// focusing the cell

if(rhFound != GridControl.InvalidRowHandle) {

view.FocusedRowHandle = rhFound;

view.FocusedColumn = column;

}

}

另一个查找示例

DevExpress.XtraGrid.Views.Base.ColumnView view = gridControl1.MainView as DevExpress.XtraGrid.Views.Base.ColumnView;

view.BeginUpdate();

try {

int rowHandle = 0;

DevExpress.XtraGrid.Columns.GridColumn col = view.Columns["Category"];

while(true) {

// locating the next row

rowHandle = view.LocateByValue(rowHandle, col, "SPORTS");

// exiting the loop if no row is found

if (rowHandle == DevExpress.XtraGrid.GridControl.InvalidRowHandle)

break;

// perform specific operations on the row found here

// ...

rowHandle++;

}

} finally { view.EndUpdate(); }

将特定编辑框绑定到列

默认的cell编辑框是不可以改变的,即使是在运行时,因为它们是动态创建和注销的。

要想定制,就在设计时修改ColumnEdit吧。

using DevExpress.XtraEditors.Repository;

//Create a repository item for a combo box editor

RepositoryItemComboBox riCombo = new RepositoryItemComboBox();

riCombo.Items.AddRange(new string[] {"London", "Berlin", "Paris"});

//Add the item to the internal repository

gridControl1.RepositoryItems.Add(riCombo);

//Now you can define the repository item as an in-place column editor

colCity.ColumnEdit = riCombo;

另一个运行时绑定列编辑框示例

private void gridView1_CustomRowCellEdit(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e) {

if (e.Column.FieldName == "FieldName") return;

DevExpress.XtraGrid.Views.Grid.GridView gv = sender as DevExpress.XtraGrid.Views.Grid.GridView;

string fieldName = gv.GetRowCellValue(e.RowHandle, gv.Columns["FieldName"]).ToString();

switch (fieldName) {

case "Population":

e.RepositoryItem = repositoryItemSpinEdit1;

break;

case "Country":

e.RepositoryItem = repositoryItemComboBox1;

break;

case "Capital":

e.RepositoryItem = repositoryItemCheckEdit1;

break;

}

}

检验录入数据是否有效

using DevExpress.XtraGrid.Views.Grid;

using DevExpress.XtraGrid.Columns;

public bool isValidDate(int day, int month, int year) {

return (day > 0) && (month > 0) && (month <= 12) && (year > 1980) && (year < 2100) && (day <= DateTime.DaysInMonth(year, month));

}

private void gridView1_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e) {

GridView view = sender as GridView;

GridColumn colDay = view.Columns["Day"];

GridColumn colMonth = view.Columns["Month"];

GridColumn colYear = view.Columns["Year"];

int day = (int)view.GetRowCellValue(e.RowHandle, colDay);

int month = (int)view.GetRowCellValue(e.RowHandle, colMonth);

int year = (int)view.GetRowCellValue(e.RowHandle, colYear);

e.Valid = isValidDate(day, month, year);

if(!e.Valid) {

view.SetColumnError(colDay, "Check the day");

view.SetColumnError(colMonth, "Check the month");

view.SetColumnError(colYear, "Check the year");

}

}

MouseMove捕捉



private void Grid_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)

{

ShowHitInfo(this.gridView1.CalcHitInfo(new Point(e.X, e.Y)));

}

private void ShowHitInfo(DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hi)

{

DevExpress.XtraGrid.Views.Base.ColumnView cgv =

(DevExpress.XtraGrid.Views.Base.ColumnView)Grid.MainView;

string columnName = hi.Column == null ? "No column" : hi.Column.Caption;

switch(columnName)

{

case "账号":

txtUserName.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);

break;

case "密码":

txtPassword.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);

break;

case "真实姓名":

txtRealName.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);

break;

case "电子邮件":

txtEmail.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);

break;

case "角色":

cbRole.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);

break;

default:

txtUserName.Text = "Null";

txtPassword.Text = "Null";

txtRealName.Text = "Null";

txtEmail.Text = "Null";

cbRole.Text = "Null";

break;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: