1. 程式人生 > >整理GridControl層級表格及按鈕列

整理GridControl層級表格及按鈕列

一、設計器
1、通過設計器新增Column
2、把列的ColumnEdit屬性設定為RepositoryItemButtonEdit 
3、 把TextEditStyle屬性設定為HideTextEditor;
4、把Buttons的Kind屬性設定為Glyph; 
5、設定Buttons的ShowButtonMode = ShowAlways。
6、設定Buttons的ButtonsStyle =simple
7、設定Buttons的Image
8、某列所有行設定為按鈕:點左側Main裡的Columns,點你想在上頭新增控制元件的列,找右側Data下的ColumnEdit,點最右邊的下拉選單點Existing左側的加號,就能找到你剛才的控制元件,新增。會預設給該列的每一個格都加上這個控制元件。
9、如果要用到事件的話,在GridControl的設計器中Repository頁中的In-place Editor Repository項中 在右邊的Repository欄中找到你的ButtonEdit,選它的事件屬性頁,註冊它的ButtonClick事件即可
10、事件  
/// <summary>
/// 上移
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void repositoryIbtUp_ButtonClick(object sender,DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
{
     int rowhandle = gridmodelparam.FocusedRowHandle;
     DataRow dr = gridmodelparam.GetDataRow(rowhandle);
}
有了DataRow,dr["columnname"]就可以得到行上面的任意欄位值了,比如取id,dr["id"]


二、
GridControl
(1)層次設計器
有五種檢視模式,banded gridview多行表頭,資料還是一行一組,最靠近資料的表頭與資料一一對應;advanced banded gridview多行表頭,資料可以多行一組;cardview 一個卡片是一組資料,其中左側是標題,右側是資料;layout view是card view的集合,佈局可以自定義

(2)檢視
檢視的層次結構
 檢視屬性:
可通過GridControl.Views訪問所有檢視。
可通過ColumnView.Columns訪問當前檢視的所有列
(3)設計器(層次設計器中點選Run Designer可調出)
設計器有四大功能:①主要功能的設計;②選擇外觀;③可以選擇多個檢視,內嵌編輯器的設定;④列印功能的設定
①        View:
(a)Option:
OptionsBehavior可以設定行為(是否允許新增行/是否允許刪除行/是否允許編輯/是否允許展開所有分組)
OptionsCustomization(是否允許排序/分組/過濾/列的移動/列的大小的調整)
OptionsDetail(設定從表的屬性)、OptionsFilter(過濾屬性的設定)OptionsView(顯示或隱藏某些東西,比如標題行)
(b)AppearancePrint :  (行高…)
Columns://列的相應的屬性
FeatureBrowser://設定事件,Grid的繫結、列的繫結(有方法提示),什麼都可以設定
Layout:設定佈局
Group Summary Items新增分組統計
②       Appearance:
Appearances可設定行的外觀
Format Conditions條件樣式
Style Schemes可設定主題(比較方便)
③       Repository
View Repository設計檢視,與①差不多
In-place Editor Repository內嵌編輯器
④       Printing
(4)gridControl:給該列新增元件(如按鈕)  三種方法
法一:開啟設計器(Run Designer),選擇左側Repository,點選In-place Editor Repository(內嵌編輯器),點選Add右側的下拉選單


,選擇你想新增的控制元件,比如ComboBoxEdit,再在右側編輯控制元件的屬性,ComboBox的話就可以設定Data下的Items集合,然後點左側


Main裡的Columns,點你想在上頭新增控制元件的列,找右側Data下的ColumnEdit,點最右邊的下拉選單,點Existing左側的加號,就能找


到你剛才的控制元件,新增。會預設給該列的每一個格都加上這個控制元件。


法二:點選你想新增控制元件的列標題,再點屬性欄中的ColumnEdit,下拉選單點new,選擇想新增的控制元件,然後Column Edit左側會出現加


號,展開加號,下方會出現許多子屬性,這些都是設定內嵌的控制元件的屬性的。
法三:直接寫程式碼。
②       拖動一個gridControl控制元件,改變檢視為BandedGridview,屬性欄中點OptionView,選擇NewItemRowPosition,選Bottom
②新增引用:usingDevExpress.XtraGrid.Views.BandedGrid;
form的建構函式中新增程式碼:


BandedGridColumn newColumn = bandedGridView1.Columns.Add() as BandedGridColumn;
           newColumn.Caption = "Country";
           bandedGridView1.Bands[0].Columns.Add(newColumn);
            newColumn.Visible = true;
②(假設新增的控制元件是計算器)新增引用:usingDevExpress.XtraEditors.Repository;
form的建構函式中繼續新增程式碼,效果圖
RepositoryItemCalcEdit calcEdit = new RepositoryItemCalcEdit();
           gridControl.RepositoryItems.Add(calcEdit);
            newColumn.ColumnEdit = calcEdit;
(5)給gridview新增篩選器
              點選gridview1,再點屬性欄中的OptionsView,下頭有個ShowFilterPanelMode,預設的是不顯示,改成總是顯示,這


樣gridview下方就會出現一個篩選器,可以根據條件對資料進行篩選,再顯示。


(6)gridview匯出為PDF
可以在窗體中添加個按鈕,把gridview匯出為PDF並在Adobe Reader中顯示,前提是電腦上安裝的Adobe Reader.
按鈕中新增如下程式碼:
DevExpress.XtraGrid.Views.Grid.GridView View = gridControl1.MainView as DevExpress.XtraGrid.Views.Grid.GridView;
            if(View != 
null)
                View.ExportToPdf("ShowData.pdf");//pdf的檔名必須是英文
 
            ProcesspdfExport = new Process();
            pdfExport.StartInfo.FileName = 
"AcroRd32.exe";
            pdfExport.StartInfo.Arguments = 
"ShowData.pdf";
            pdfExport.Start();
新增引用using System.Diagnostics;
實際效果圖:(列標題無法顯示,可能是漢字字型的問題,圖中預設為宋體)


(7)滑鼠滑過gridview時,滑鼠所指行顯示橙色
①新增兩個引用:usingDevExpress.XtraGrid.Views.Grid;
usingDevExpress.XtraGrid.Views.Grid.ViewInfo;
②宣告一個私有成員變數:private 
inthotTrackRow = DevExpress.XtraGrid.GridControl.InvalidRowHandle;
③寫一個方法:  private 
int HotTrackRow {
            get{
                returnhotTrackRow;
            }
            set{
                if(hotTrackRow != value)
                {
                    intprevHotTrackRow = hotTrackRow;
                    hotTrackRow = value;
 
                   gridView1.RefreshRow(prevHotTrackRow);
                    gridView1.RefreshRow(hotTrackRow);
 
                    if(hotTrackRow >= 0)
                        gridControl1.Cursor = 
Cursors.Hand;
                    else
                        gridControl1.Cursor = 
Cursors.Default;
                }
            }
       }
④   在gridview的屬性欄中找到事件,新增一個MouseMove事件:
 private 
voidgridView1_MouseMove(object sender, 
MouseEventArgs e)
       {
            GridViewview = sender as GridView;
            GridHitInfoinfo = view.CalcHitInfo(new Point(e.X, e.Y));
 
            if(info.InRowCell)
                HotTrackRow = info.RowHandle;
            else
                HotTrackRow =DevExpress.XtraGrid.GridControl.InvalidRowHandle;
       }
⑤   在gridview的屬性欄中找到事件,給gridview新增一個RowCellStyle事件:
private 
void gridView1_RowCellStyle(object sender, RowCellStyleEventArgse)
       {
            if(e.RowHandle == HotTrackRow)
                e.Appearance.BackColor = 
Color.PaleGoldenrod;
       }
效果圖:(滑鼠滑過時,滑鼠所指行顯示橙色)


(8)gridview中的當前所選框四周加粗,效果圖:


①   新增兩個引用:using System.Reflection;
usingDevExpress.Utils.Paint;
②再寫一個類:
public class MyXPaint : XPaint
   {
       public 
overridevoid DrawFocusRectangle(Graphics g, Rectangle r, Color foreColor, ColorbackColor)
       {
            if(!CanDraw(r)) 
return;
            Brushhb = 
Brushes.Black;
            g.FillRectangle(hb, new Rectangle(r.X,r.Y, 2, r.Height - 2));//left
            g.FillRectangle(hb, new Rectangle(r.X,r.Y, r.Width - 2, 2));//top
            g.FillRectangle(hb, new Rectangle(r.Right-2,r.Y,2, r.Height-2));//right
            g.FillRectangle(hb, new Rectangle(r.X,r.Bottom-2,r.Width, 2));//bottom
       }
}
③在當前form的load事件中新增兩行程式碼:
FieldInfo fi = 
typeof(XPaint).GetField("graphics",BindingFlags.Static | BindingFlags.NonPublic);
            fi.SetValue(null, 
new MyXPaint());
(9)gridControl內嵌導航欄(可以翻頁、新增或刪除行)
點選gridControl1,點屬性欄中最下方的UseEmbeddedNavigator,選true,gridview下方就會出現內嵌導航欄
刪除行時可以新增提示按鈕,方法:
      新增引用using DevExpress.XtraEditors;
      點選gridControl1,點屬性欄中的事件,雙擊EmbeddedNavigator中的ButtonClick事件,新增程式碼:
if(e.Button.ButtonType == 
NavigatorButtonType.Remove)
            {
if (MessageBox.Show("你想刪除當前行麼?", "確認刪除", 
MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question) != DialogResult.Yes)
                    e.Handled = true;
            }
翻頁:如果只要翻頁按鈕,可以把其餘按鈕設為不可見
gridControl1屬性 EmbededNavigator-Buttons—PrevPage和NextPage的visible設為true,其餘的visible全設為false
(10)右鍵選單(只能對當前單元格進行復制、貼上、全選、剪下、操作)
選擇gridView1,在屬性欄的事件中雙擊ShownEditor事件,新增程式碼,效果圖:↑
      System.Windows.Forms.ContextMenu cm;
       private 
voidgridView1_ShownEditor(object sender, 
EventArgs e)
       {
            if(cm == 
null)
            {
                InitializeCustomontextMenu();
            }
            this.bandedGridView1.ActiveEditor.ContextMenu= cm;
       }
       private 
voidInitializeCustomontextMenu()
       {
            cm = newSystem.Windows.Forms.ContextMenu();
            cm.MenuItems.Add(new 
MenuItem("剪下", new EventHandler(OnCut)));
            cm.MenuItems.Add(new 
MenuItem("複製", new EventHandler(OnCopy)));
            cm.MenuItems.Add(new 
MenuItem("貼上", new EventHandler(OnPaste)));
            cm.MenuItems.Add("-");
            cm.MenuItems.Add(new 
MenuItem("全選", new EventHandler(OnSelectAll)));
       }
       private 
voidOnCut(object sender, 
EventArgse)
       {
            TextEdittextEdit = this. gridView1.ActiveEditor 
as TextEdit;
            if(textEdit != 
null)
            {
                textEdit.Cut();
            }
       }
       private 
voidOnCopy(object sender, 
EventArgse)
       {
            TextEdittextEdit = this. gridView1.ActiveEditor 
as TextEdit;
            if(textEdit != 
null) {
                textEdit.Cut();
            }
       }
       private 
voidOnPaste(object sender, 
EventArgse)
       {
            TextEdittextEdit = this. gridView1.ActiveEditor 
as TextEdit;
            if(textEdit != 
null)
            {
                textEdit.Paste();
            }
       }
       private 
voidOnSelectAll(object sender, 
EventArgs e)
       {
            TextEdittextEdit = this.gridView1.ActiveEditor 
as TextEdit;
            if(textEdit != 
null)
            {
                textEdit.SelectAll();
            }
       }
(12)對某列進行求和或取最大值最小值,顯示在gridview底部。
gridview1繫結資料後,點選Run Designer,點Column,右側點Data下的
Symmary Item,Summary Type的選項根據需求來選。然後關閉當前視窗,gridView1的屬性設定頁尾可見(屬性欄中點


OptionView,ShowFooter改為True)。該列的頁尾的單元格顏色可以設定。選擇gridView1事件中的CustomDrawFooterCell,新增如下代


碼,再新增引用UsingSystem.Drawing.Drawing2D;
(13)gridView不可編輯
OptionBehavior的Editable改為false
(14)單元格新增顏色,效果圖:
 
在gridView1的RowCellStyle事件中新增如下程式碼:
if (e.RowHandle != bandedGridView1.FocusedRowHandle &&((e.RowHandle % 2 == 0 && e.Column.VisibleIndex % 2 == 1) ||


(e.Column.VisibleIndex % 2 == 0 && e.RowHandle % 2 == 1)))
                e.Appearance.BackColor = 
Color.AliceBlue;
(15)gridView按某列標題進行分組(各個組可以展開收起,分組條件為使用者的拖拽列,把列標題拖拽到最上方即可),效果圖:


 
新增引用:using DevExpress.XtraGrid.Views.Base;
在gridView1的FocusedRowChanged事件中新增程式碼:
if (gridView1.IsGroupRow(e.FocusedRowHandle))
            {
                boolexpanded = gridView1.GetRowExpanded(e.FocusedRowHandle);
                gridView1.SetRowExpanded(e.FocusedRowHandle,!expanded);
            }
(15)根據單元格的值改變其背景色(右圖是將Date列中,值小於2015的單元格染色)
雙擊進入gridView1的CustomDrawCell事件:
private 
void gridView1_CustomDrawCell(object sender, RowCellCustomDrawEventArgse)
       {
            if(e.Column.FieldName == "Date")
            {
                intx = 
Convert.ToInt32(gridView1.GetRowCellValue(e.RowHandle,"Date"));
                if(x < 2015)
                    e.Appearance.BackColor=Color.MistyRose;
            }
            }
(16)列對齊方式  gridView1.Columns["Date"].AppearanceCell.TextOptions.HAlignment= DevExpress.Utils.HorzAlignment.Near;
//Near左對齊    Center居中對齊    Far右對齊    Default資料預設的對齊方式
(17)gridControl繫結資料來源DataTable