Devexpress系列控件功能很強大,使用起來也不太容易,我也是邊摸索邊使用,如果有時間我會把常用控件的使用方法整理出來的。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.BandedGrid;
using DevExpress.XtraEditors.Repository;
namespace XtraGridDemo1
{
public partial class Form1 : DevExpress.XtraEditors.XtraForm
{
public Form1()
{
InitializeComponent();
//首先拖到窗體上一個GridControl,在表格上點擊“Click here to change view”鏈接,在彈出菜單中選擇“convert to”-->“AdvBandedGridView”。
InitGrid();
}
///初始化表格
private void InitGrid()
{
// advBandedGridView1是表格上的默認視圖,注意這里聲明的是:BandedGridView
BandedGridView view = advBandedGridView1 as BandedGridView;
view.BeginUpdate(); //開始視圖的編輯,防止觸發其他事件
view.BeginDataUpdate(); //開始數據的編輯
view.Bands.Clear();
//修改附加選項
view.OptionsView.ShowColumnHeaders = false; //因為有Band列了,所以把ColumnHeader隱藏
view.OptionsView.ShowGroupPanel = false; //如果沒必要分組,就把它去掉
view.OptionsView.EnableAppearanceEvenRow = false; //是否啟用偶數行外觀
view.OptionsView.EnableAppearanceOddRow = true; //是否啟用奇數行外觀
view.OptionsView.ShowFilterPanelMode = ShowFilterPanelMode.Never; //是否顯示過濾面板
view.OptionsCustomization.AllowColumnMoving = false; //是否允許移動列
view.OptionsCustomization.AllowColumnResizing = false; //是否允許調整列寬
view.OptionsCustomization.AllowGroup = false; //是否允許分組
view.OptionsCustomization.AllowFilter = false; //是否允許過濾
view.OptionsCustomization.AllowSort = true; //是否允許排序
view.OptionsSelection.EnableAppearanceFocusedCell = true; //???
view.OptionsBehavior.Editable = true; //是否允許用戶編輯單元格
//添加列標題
GridBand bandID = view.Bands.AddBand("ID");
bandID.Visible = false; //隱藏ID列
GridBand bandName = view.Bands.AddBand("姓名");
GridBand bandSex = view.Bands.AddBand("性別");
GridBand bandBirth = view.Bands.AddBand("出生日期");
GridBand bandScore = view.Bands.AddBand("分數");
GridBand bandMath = bandScore.Children.AddBand("數學");
GridBand bandChinese = bandScore.Children.AddBand("語文");
GridBand bandEnglish = bandScore.Children.AddBand("英語");
GridBand bandSubTotal = bandScore.Children.AddBand("小計");
GridBand bandRemark = view.Bands.AddBand("備注");
//列標題對齊方式
bandName.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
bandSex.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
bandBirth.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
bandScore.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
bandMath.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
bandChinese.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
bandEnglish.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
bandSubTotal.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
bandRemark.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
//模擬幾個數據
List<Record> listDataSource = new List<Record>();
listDataSource.Add(new Record(1, "張三","男",Convert.ToDateTime("1989-5-6") ,115.5f,101,96,""));
listDataSource.Add(new Record(2, "李四", "女", Convert.ToDateTime("1987-12-23"), 92, 85, 87, ""));
listDataSource.Add(new Record(3, "王五", "女", Convert.ToDateTime("1990-2-11"), 88, 69, 41.5f, ""));
listDataSource.Add(new Record(4, "趙六", "男", Convert.ToDateTime("1988-9-1"), 119, 108, 110, "備注行"));
//綁定數據源並顯示
gridControl1.DataSource = listDataSource;
gridControl1.MainView.PopulateColumns();
//[小計]這一列因為沒綁定數據源,所以需要手動添加
//(有點復雜,慢慢看吧)
string[] fieldNames = new string[] { "SubTotal" };
GridColumn column; //聲明單列
column = view.Columns.AddField(fieldNames[0]); //添加一個數據字段
column.VisibleIndex = view.Columns.Count -1; //設置該列在編輯視圖時的顯示位置(倒數第二列)
column.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;
column.OptionsColumn.AllowEdit = false; //此列不可編輯
column.Visible = true;
view.Columns.Add(column); //視圖中添加一列
//綁定事件,當[分數]改變時[小計]也跟着變
//(好像只有在綁定事件里才能改變該單元格數值,直接修改無效)
view.CustomUnboundColumnData += new
DevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(advBandedGridView1_CustomUnboundColumnData);
//[性別]列綁定ComboBox
RepositoryItemComboBox riCombo = new RepositoryItemComboBox();
riCombo.Items.AddRange(new string[] {"男", "女"});
gridControl1.RepositoryItems.Add(riCombo);
view.Columns["Sex"].ColumnEdit = riCombo;
//[出生年月]列綁定Date
RepositoryItemDateEdit riDate = new RepositoryItemDateEdit();
gridControl1.RepositoryItems.Add(riDate);
view.Columns["Birth"].ColumnEdit = riDate;
//[分數]列綁定SpinEdit
RepositoryItemSpinEdit riSpin = new RepositoryItemSpinEdit();
gridControl1.RepositoryItems.Add(riSpin);
view.Columns["Math"].ColumnEdit = riSpin;
view.Columns["Chinese"].ColumnEdit = riSpin;
view.Columns["English"].ColumnEdit = riSpin;
//[備注]列綁定MemoExEdit
RepositoryItemMemoExEdit riMemoEx = new RepositoryItemMemoExEdit();
gridControl1.RepositoryItems.Add(riMemoEx);
view.Columns["Remark"].ColumnEdit = riMemoEx;
//小計列添加匯總
view.OptionsView.ShowFooter = true; //顯示表格頁腳
view.Columns["SubTotal"].SummaryItem.FieldName = "SubTotal";
view.Columns["SubTotal"].SummaryItem.DisplayFormat = "{0:f2}";
view.Columns["SubTotal"].SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Average;
//將標題列和數據列對應
view.Columns["ID"].OwnerBand = bandID;
view.Columns["Name"].OwnerBand = bandName;
view.Columns["Sex"].OwnerBand = bandSex;
view.Columns["Birth"].OwnerBand = bandBirth;
view.Columns["Math"].OwnerBand = bandMath;
view.Columns["Chinese"].OwnerBand = bandChinese;
view.Columns["English"].OwnerBand = bandEnglish;
view.Columns["SubTotal"].OwnerBand = bandSubTotal;
view.Columns["Remark"].OwnerBand = bandRemark;
view.EndDataUpdate();//結束數據的編輯
view.EndUpdate(); //結束視圖的編輯
}
// 計算小計
private float calcSubTotal(float math, float chinese, float english)
{
return math + chinese + english;
}
private void advBandedGridView1_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
{
ColumnView colView = sender as ColumnView;
if (e.Column.FieldName == "SubTotal" && e.IsGetData) e.Value = calcSubTotal(
Convert.ToSingle(colView.GetRowCellValue(e.RowHandle, colView.Columns["Math"])),
Convert.ToSingle(colView.GetRowCellValue(e.RowHandle, colView.Columns["Chinese"])),
Convert.ToSingle(colView.GetRowCellValue(e.RowHandle, colView.Columns["English"])));
}
#region 運行時綁定到實現Ilist接口的數據源
public class Record
{
int id;
DateTime birth;
string name, sex, remark;
float math, chinese, english;
public Record(int id, string name, string sex, DateTime birth, float math, float chinese, float english, string remark)
{
this.id = id;
this.name = name;
this.sex = sex;
this.birth = birth;
this.math = math;
this.chinese = chinese;
this.english = english;
this.remark = remark;
}
public int ID { get { return id; } }
public string Name
{
get { return name; }
set { name = value; }
}
public string Sex
{
get { return sex; }
set { sex = value; }
}
public DateTime Birth
{
get { return birth; }
set { birth = value; }
}
public float Math
{
get { return math; }
set { math = value; }
}
public float Chinese
{
get { return chinese; }
set { chinese = value; }
}
public float English
{
get { return english; }
set { english = value; }
}
public string Remark
{
get { return remark; }
set { remark = value; }
}
}
#endregion
}
}
也可以用DataTable進行數據綁定,方法跟上面一致,注意
//模擬幾個數據 DataTable dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("Name"); dt.Columns.Add("Sex"); dt.Columns.Add("Birth"); dt.Columns.Add("Math"); dt.Columns.Add("Chinese"); dt.Columns.Add("English"); dt.Columns.Add("SubTotal"); dt.Columns.Add("Remark"); dt.Rows.Add(1, "張三", "男", Convert.ToDateTime("1989-5-6"), 115.5f, 101, 96, ""); dt.Rows.Add(2, "李四", "女", Convert.ToDateTime("1987-12-23"), 92, 85, 87, ""); dt.Rows.Add(3, "王五", "女", Convert.ToDateTime("1990-2-11"), 88, 69, 41.5f, ""); dt.Rows.Add(4, "趙六", "男", Convert.ToDateTime("1988-9-1"), 119, 108, 110, "備注行"); //綁定數據源並顯示 gridControl1.DataSource = dt; gridControl1.MainView.PopulateColumns();
原文地址:http://www.cnblogs.com/habin/archive/2009/04/24/1442613.html