下面的代碼來自GridTutorials v10.1
RunTimeUsing
DataSet ds =
new DataSet();
private void GridRunTimeUsing_Load( object sender, System.EventArgs e) {
InitNWindData();
GridAdjustment();
GridEditorsAdjustment();
GridAppearance();
}
/// <summary>
/// DataSet 數據源,表之間的關系
/// </summary>
/// <param name="connectionString"></param>
protected override void InitMDBData( string connectionString) {
OleDbDataAdapter oleDBAdapter1 = new OleDbDataAdapter( " SELECT * FROM Customers ", connectionString);
OleDbDataAdapter oleDBAdapter2 = new OleDbDataAdapter( " SELECT * FROM Orders ", connectionString);
OleDbDataAdapter oleDBAdapter3 = new OleDbDataAdapter( " SELECT * FROM [Order Details] ", connectionString);
OleDbDataAdapter oleDBAdapter4 = new OleDbDataAdapter( " SELECT * FROM Employees ", connectionString);
OleDbDataAdapter oleDBAdapter5 = new OleDbDataAdapter( " SELECT * FROM Products ", connectionString);
oleDBAdapter1.Fill(ds, " Customers ");
oleDBAdapter2.Fill(ds, " Orders ");
oleDBAdapter3.Fill(ds, " Order Details ");
oleDBAdapter4.Fill(ds, " Employees ");
oleDBAdapter5.Fill(ds, " Products ");
ds.Relations.Add( " Orders ",
ds.Tables[ " Customers "].Columns[ " CustomerID "],
ds.Tables[ " Orders "].Columns[ " CustomerID "]);
ds.Relations.Add( " OrderDetails ",
ds.Tables[ " Orders "].Columns[ " OrderID "],
ds.Tables[ " Order Details "].Columns[ " OrderID "]);
ds.Relations.Add( " Employees ",
ds.Tables[ " Orders "].Columns[ " EmployeeID "],
ds.Tables[ " Employees "].Columns[ " EmployeeID "], false);
gridControl1.DataSource = ds.Tables[ " Customers "];
gridControl1.MainView.PopulateColumns();
}
protected override void InitXMLData( string dataFileName) {
}
/// <summary>
/// 多個GridView,分層的主要是通過2個GridView之間的關系 gridControl1.LevelTree.Nodes.Add("RelationName", gvs[i]);。
/// </summary>
private void GridAdjustment()
{
gridControl1.MainView.KeyDown += new KeyEventHandler(gridView_KeyDown);
GridView[] gvs = new GridView[ 4];
ColorMaker[] colorMakers = new ColorMaker[ 4];
string[] options = new String[] {
" EvenRow ",
" OddRow ",
" FocusedRow ",
" FocusedCell ",
" GroupRow ",
" HeaderPanel ",
" GroupPanel ",
" HorzLine ",
" VertLine "};
gvs[ 0] = gridView1;
colorMakers[ 0] = new ColorMaker(Color.DimGray, Color.WhiteSmoke);
colorMakers[ 1] = new ColorMaker(Color.DarkCyan, Color.LightCyan);
colorMakers[ 2] = new ColorMaker(Color.DarkGoldenrod, Color.LightGoldenrodYellow);
colorMakers[ 3] = new ColorMaker(Color.Navy, Color.Lavender);
for ( int i = 0; i < 4; i++)
{
string prefix = "";
int basefontsize = 8, backColor = 100, foreColor = 0, font = 0;
FontStyle fstyle = FontStyle.Regular;
if (i == 0) basefontsize = 9;
if (i > 0)
{
gvs[i] = new GridView(gridControl1);
gvs[i].KeyDown += new KeyEventHandler(gridView_KeyDown);
gvs[i].OptionsDetail.ShowDetailTabs = true;
gvs[i].OptionsDetail.EnableDetailToolTip = true;
prefix = ds.Relations[i - 1].RelationName;
}
if (i < 2)
gvs[i].OptionsView.ColumnAutoWidth = false;
foreach ( string option in options)
{
switch (option)
{
case " EvenRow ":
backColor = 100;
foreColor = 0;
break;
case " OddRow ":
backColor = 90;
foreColor = 0;
break;
case " FocusedRow ":
backColor = 10;
foreColor = 90;
fstyle = FontStyle.Bold;
break;
case " FocusedCell ":
backColor = 200;
foreColor = 0;
break;
case " GroupRow ":
backColor = 60;
foreColor = 100;
fstyle = FontStyle.Italic;
break;
case " HeaderPanel ":
backColor = 30;
foreColor = 100;
font = 1;
fstyle = FontStyle.Bold;
break;
case " GroupPanel ":
backColor = 0;
foreColor = 100;
font = 2;
fstyle = FontStyle.Bold;
break;
case " HorzLine ":
case " VertLine ":
backColor = 0;
foreColor = 0;
font = 0;
break;
}
gvs[i].Appearance.GetAppearance(option).BackColor = colorMakers[i].ProduceColor(backColor);
gvs[i].Appearance.GetAppearance(option).BorderColor = colorMakers[i].ProduceColor(backColor);
gvs[i].Appearance.GetAppearance(option).ForeColor = colorMakers[i].ProduceColor(foreColor);
gvs[i].Appearance.GetAppearance(option).Font = new Font(DevExpress.Utils.AppearanceObject.DefaultFont.FontFamily, basefontsize + font, fstyle);
}
if (gvs[i].OptionsView.ShowGroupPanel)
gvs[i].OptionsView.ShowGroupPanel = false;
gvs[i].DetailHeight = 500;
gvs[i].PaintStyleName = " MixedXP ";
// 關鍵 Gridview 添加關系
if (prefix == " Orders ")
gridControl1.LevelTree.Nodes.Add(prefix, gvs[i]);
else if (prefix != "")
gridControl1.LevelTree.Nodes[ " Orders "].Nodes.Add(prefix, gvs[i]);
}
}
private void GridRunTimeUsing_Load( object sender, System.EventArgs e) {
InitNWindData();
GridAdjustment();
GridEditorsAdjustment();
GridAppearance();
}
/// <summary>
/// DataSet 數據源,表之間的關系
/// </summary>
/// <param name="connectionString"></param>
protected override void InitMDBData( string connectionString) {
OleDbDataAdapter oleDBAdapter1 = new OleDbDataAdapter( " SELECT * FROM Customers ", connectionString);
OleDbDataAdapter oleDBAdapter2 = new OleDbDataAdapter( " SELECT * FROM Orders ", connectionString);
OleDbDataAdapter oleDBAdapter3 = new OleDbDataAdapter( " SELECT * FROM [Order Details] ", connectionString);
OleDbDataAdapter oleDBAdapter4 = new OleDbDataAdapter( " SELECT * FROM Employees ", connectionString);
OleDbDataAdapter oleDBAdapter5 = new OleDbDataAdapter( " SELECT * FROM Products ", connectionString);
oleDBAdapter1.Fill(ds, " Customers ");
oleDBAdapter2.Fill(ds, " Orders ");
oleDBAdapter3.Fill(ds, " Order Details ");
oleDBAdapter4.Fill(ds, " Employees ");
oleDBAdapter5.Fill(ds, " Products ");
ds.Relations.Add( " Orders ",
ds.Tables[ " Customers "].Columns[ " CustomerID "],
ds.Tables[ " Orders "].Columns[ " CustomerID "]);
ds.Relations.Add( " OrderDetails ",
ds.Tables[ " Orders "].Columns[ " OrderID "],
ds.Tables[ " Order Details "].Columns[ " OrderID "]);
ds.Relations.Add( " Employees ",
ds.Tables[ " Orders "].Columns[ " EmployeeID "],
ds.Tables[ " Employees "].Columns[ " EmployeeID "], false);
gridControl1.DataSource = ds.Tables[ " Customers "];
gridControl1.MainView.PopulateColumns();
}
protected override void InitXMLData( string dataFileName) {
}
/// <summary>
/// 多個GridView,分層的主要是通過2個GridView之間的關系 gridControl1.LevelTree.Nodes.Add("RelationName", gvs[i]);。
/// </summary>
private void GridAdjustment()
{
gridControl1.MainView.KeyDown += new KeyEventHandler(gridView_KeyDown);
GridView[] gvs = new GridView[ 4];
ColorMaker[] colorMakers = new ColorMaker[ 4];
string[] options = new String[] {
" EvenRow ",
" OddRow ",
" FocusedRow ",
" FocusedCell ",
" GroupRow ",
" HeaderPanel ",
" GroupPanel ",
" HorzLine ",
" VertLine "};
gvs[ 0] = gridView1;
colorMakers[ 0] = new ColorMaker(Color.DimGray, Color.WhiteSmoke);
colorMakers[ 1] = new ColorMaker(Color.DarkCyan, Color.LightCyan);
colorMakers[ 2] = new ColorMaker(Color.DarkGoldenrod, Color.LightGoldenrodYellow);
colorMakers[ 3] = new ColorMaker(Color.Navy, Color.Lavender);
for ( int i = 0; i < 4; i++)
{
string prefix = "";
int basefontsize = 8, backColor = 100, foreColor = 0, font = 0;
FontStyle fstyle = FontStyle.Regular;
if (i == 0) basefontsize = 9;
if (i > 0)
{
gvs[i] = new GridView(gridControl1);
gvs[i].KeyDown += new KeyEventHandler(gridView_KeyDown);
gvs[i].OptionsDetail.ShowDetailTabs = true;
gvs[i].OptionsDetail.EnableDetailToolTip = true;
prefix = ds.Relations[i - 1].RelationName;
}
if (i < 2)
gvs[i].OptionsView.ColumnAutoWidth = false;
foreach ( string option in options)
{
switch (option)
{
case " EvenRow ":
backColor = 100;
foreColor = 0;
break;
case " OddRow ":
backColor = 90;
foreColor = 0;
break;
case " FocusedRow ":
backColor = 10;
foreColor = 90;
fstyle = FontStyle.Bold;
break;
case " FocusedCell ":
backColor = 200;
foreColor = 0;
break;
case " GroupRow ":
backColor = 60;
foreColor = 100;
fstyle = FontStyle.Italic;
break;
case " HeaderPanel ":
backColor = 30;
foreColor = 100;
font = 1;
fstyle = FontStyle.Bold;
break;
case " GroupPanel ":
backColor = 0;
foreColor = 100;
font = 2;
fstyle = FontStyle.Bold;
break;
case " HorzLine ":
case " VertLine ":
backColor = 0;
foreColor = 0;
font = 0;
break;
}
gvs[i].Appearance.GetAppearance(option).BackColor = colorMakers[i].ProduceColor(backColor);
gvs[i].Appearance.GetAppearance(option).BorderColor = colorMakers[i].ProduceColor(backColor);
gvs[i].Appearance.GetAppearance(option).ForeColor = colorMakers[i].ProduceColor(foreColor);
gvs[i].Appearance.GetAppearance(option).Font = new Font(DevExpress.Utils.AppearanceObject.DefaultFont.FontFamily, basefontsize + font, fstyle);
}
if (gvs[i].OptionsView.ShowGroupPanel)
gvs[i].OptionsView.ShowGroupPanel = false;
gvs[i].DetailHeight = 500;
gvs[i].PaintStyleName = " MixedXP ";
// 關鍵 Gridview 添加關系
if (prefix == " Orders ")
gridControl1.LevelTree.Nodes.Add(prefix, gvs[i]);
else if (prefix != "")
gridControl1.LevelTree.Nodes[ " Orders "].Nodes.Add(prefix, gvs[i]);
}
}
效果:
想起做這個效果的表,是因為Bom層次顯示的時候需要這樣。
如果加一列CheckBox,可以在計算物理需求時選擇參加計算的物料。