1. 程式人生 > >DevExpress_常用控制元件17_GridControl

DevExpress_常用控制元件17_GridControl

2.3 GridControl

1、 如何解決單擊記錄整行選中的問題

View->OptionsBehavior->EditorShowMode 設定為:Click

可選值:Default / MouseDown / MouseUp / Click

2、 如何新增一條記錄

(1)、gridView.AddNewRow()

(2)、實現 gridView_InitNewRow 事件

3、如何解決 GridControl 記錄  能獲取   而   沒有顯示出來的問題

gridView.populateColumns();

4、如何讓行  只能選擇   而不能編輯(或編輯某一單元格)

(1)、View->OptionsBehavior->EditorShowMode 設定為:Click

(2)、View->OptionsBehavior->Editable 設定為:false

5、如何禁用 GridControl 中 單擊列   彈出右鍵選單

設定 Run Design->OptionsMenu->EnableColumnMenu 設定為:false

6、如何隱藏 GridControl 的 GroupPanel 表頭

設定 Run Design->OptionsView->ShowGroupPanel 設定為:false

7、如何顯示水平滾動條

a. 設定 this.gridView.OptionsView.ColumnAutoWidth = false;

b. 列表寬度自適應內容

gridview1.BestFitColumns();

8、如何定位到第一條資料/記錄?

呼叫方法:  this.gridView.MoveFirst();

9、如何定位到下一條資料/記錄?

呼叫方法:  this.gridView.MoveNext();

10、如何定位到最後一條資料/記錄?

呼叫方法:  this.gridView.MoveLast();

11、如何讓   各列頭   禁止移動?

設定 gridView1.OptionsCustomization.AllowColumnMoving

 = false;

12、如何讓   各列頭   禁止排序?

設定 gridView1.OptionsCustomization.AllowSort = false;

13、如何禁止  各列頭  改變列寬?

設定 gridView1.OptionsCustomization.AllowColumnResizing = false;

14、拖動滾動條時   固定某一列

設定Columns,

選擇要固定的列,設定Fixed屬性,

可以選擇:

a. 固定在左邊、

b. 固定在右邊、

c. 不固定。

15、設定成   一次選擇一行,且不能被編輯

gridView1.OptionsBehavior.Editable = false;
gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;
gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;

16、如何顯示行號?

private void gvPayList_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e){
	e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
	if(e.Info.IsRowIndicator){
		if(e.RowHandle >= 0){
			e.Info.DisplayText = (e.RowHandle + 1).ToString();                 
		}else if(e.RowHandle > -1000 && e.RowHandle < 0){
  			e.Info.Appearance.BackColor = System.Drawing.Color.AntiqueWhite; 
  			e.Info.DisplayText = "G" + e.RowHandle.ToString();                 
  		}             
  	}         
}

17、如何禁用 GridControl 中   列頭的過濾器 

過濾器如下圖所示:     

設定 Run Design->OptionsCustomization->AllowFilter 設定為:false

18、設計資料來源  並  繫結欄位:             

            DataTable dt = new DataTable();
            dt.Columns.Add("Name", System.Type.GetType("System.String"));
            dt.Columns.Add("Sex", System.Type.GetType("System.String"));
            dt.Columns.Add("Age", System.Type.GetType("System.String"));

           DataRow row = dt.NewRow();;
           row["Name"] = "mathilda";
           row["Sex"] = "loli";
           row["Age"] = "12";
           dt.Rows.Add(row);

           // 繫結欄位
           gridView1.Columns[1].FieldName = "Sex";
           gridView1.Columns[2].FieldName = "Age";
           gridView1.Columns[0].FieldName = "Name";
           gridControl1.DataSource = dt;

19、如何在查詢得到 0 條記錄時顯示自定義的字元提示/顯示 如圖所示:

方法如下:

// When no Records Are Being Displayed
private void gridView1_CustomDrawEmptyForeground(object sender, CustomDrawEventArgs e)
{
    // 方法一(此方法為GridView設定了資料來源繫結時,可用)
    ColumnView columnView = sender as ColumnView;
    BindingSource bindingSource = this.gridView1.DataSource as BindingSource;
    if(bindingSource.Count == 0){
        string str = "沒有查詢到你所想要的資料!";
        Font f = new Font("宋體", 10, FontStyle.Bold);        
        var tmpLeft = e.Bounds.Left + 5;
        var tmpTop = e.Bounds.Top + 5;
        var tmpWidth = e.Bounds.Width - 5;
        var tmpHeight = e.Bounds.Height - 5;
        Rectangle r = new Rectangle(tmpLeft, tmpTop, tmpWidth, tmpHeight);
        e.Graphics.DrawString(str, f, Brushes.Black, rect); 
    }
}

// 方法二(此方法 適用於: GridView 沒有設定資料來源時)

if (this._flag){
 if (this.gridView1.RowCount == 0){ 
    string str = "沒有查詢到你所想要的資料!"; 
    Font f = new Font("宋體", 10, FontStyle.Bold);
    var tmpLeft = e.Bounds.Left + 5;
    var tmpTop = e.Bounds.Top + 5;
    var tmpWidth = e.Bounds.Width - 5;
    var tmpHeight = e.Bounds.Height - 5;
    Rectangle r = new Rectangle(tmpLeft, tmpTop, tmpWidth, tmpHeight);
    e.Graphics.DrawString(str, f, Brushes.Black, r); 
 } 
} 

20.獲取  選定行,指定列 單元格的內容

gridView1.GetRowCellValue(pRows[0], ColumName).ToString ();

21.分組顯示

OptionsView>OptionsBehavior>AutoExpandAllGroups = True

選擇要分組的列,將GroupIndex屬性設定為0

22.格式化資料

private void gvList_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e){
             if (this.gvList.FocusedColumn.FieldName == "passQty"){ 
				
                string passQty = e.Value.ToString().Trim();                 
				
                int receiveQty = orderDetailList[this.gvList.FocusedRowHandle].qty; 
                if (!JXType.IsIntBigThanZero(passQty)){ 
                    e.Valid = false;                     
                    e.ErrorText = "合格數量必須為大於等於0, 並且小於等於接貨數量的整數!";
				
                }else{ 
                    if (int.Parse(passQty) > receiveQty){ 
                        e.Valid = false;                         
                        e.ErrorText = "合格數量必須為大於0, 並且小於等於接貨數量的整數!";
					
                    }
				
                }
		   
            }
}

24、動態新增列   

// 動態新增列             
DevExpress.XtraGrid.Columns.GridColumn Col1 = new DevExpress.XtraGrid.Columns.GridColumn();             
Col1.FieldName = "Name";             
Col1.Caption = "名字";             
Col1.Visible = false;             
Col1.VisibleIndex = gvCountry.Columns.Count;             
gvCountry.Columns.Add(Col1);

25、設定自動增加的行號 

 private void gridview_CustomDrawRowIndicator(object sender,DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e){
     e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
     
     if(e.Info.IsRowIndicator){
        if(e.RowHandle >= 0){
            e.Info.DisplayText = (e.RowHandle + 1).ToString();                 
        }else if(e.RowHandle > -1000 && e.RowHandle < 0){
            e.Info.Appearance.BackColor = System.Drawing.Color.AntiqueWhite;
            e.Info.DisplayText = "G" + e.RowHandle.ToString();                 
        }             
     }
}

26、GridControl中有5種 view 特效樣式,

普通的是GridView,

然後是CardView、

BandedView、

Advanced BandedView、

LayoutView;

共5種。  

1)、view組中把OptionView下的ViewMode 設定成“Carousel”就達到這種“旋轉木馬”式 的特效了   

2)、layoutView1.OptionsCarouselMode.PitchAngle 這個屬性決定“旋轉木馬”的:

pitch angle 螺距角; 

螺旋角; 

螺旋升角; 

俯仰角; 

傾角; 

節錐半形    

3)、Roll Angle 屬性決定著 傾斜角度   

4)、指定資料來源,顯示資料:   

//顯示資料         
private void showData(List<Girl > list){
    DataTable table = new DataTable("Girl");             
    table.Columns.Add("Name", System.Type.GetType("System.String"));             
    table.Columns.Add("Anime", System.Type.GetType("System.String"));             
    tablet.Columns.Add("PhotoName", System.Type.GetType("System.Byte[]"));
    
    for (int i = 0; i < list.Count; i++){
        DataRow row = table.NewRow();                 
        row["Name"] = list[i].Name;                 
        row["Anime"] = list[i].Anime;                 
        string imagePath = @"D:\C#\photos\" + list[i].PhotoPath;                 
        row["PhotoName"] = encapsulation_getImageByte(imagePath);                 
        table.Rows.Add(row);            
     }             
    // 核心程式碼
    gridControl1.DataSource = table;         
}  

// 返回圖片的位元組流byte[]         
private byte[] encapsulation_getImageByte(string imagePath){
    FileStream files = new FileStream(imagePath, FileMode.Open);             
    byte[] imgByte = new byte [files.Length];             
    files.Read(imgByte, 0, imgByte.Length);             
    files.Close();             
    return imgByte;         
}

27、檢查資料的有效性  

在gridview的ValidateRow事件中加入檢查程式碼:   

#region 檢查資料   
private void gridView1_ValidateRow(object sender, ValidateRowEventArgs e){
    GridView view = sender as GridView;   
    view.ClearColumnErrors();
    if (view.GetRowCellValue(e.RowHandle, "Birthday") == DBNull.Value){ 
        e.Valid = false;   
        view.SetColumnError(view.Columns["Birthday"], "必須指定出生日期");   
    }
}

28、設某一列  標題 和 文字  居中顯示                      

gridView1.Columns[0].AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;    
gridView1.Columns[0].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;

29、列表過濾條件多選

列名.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList

30、隔行換色的方法

// 設定奇數行顏色,預設也是白色 可以省略 
gridView1.Appearance.OddRow.BackColor = Color.White;  
// 使所有的奇數行 允許 應用 介面上的設定 
gridView1.OptionsView.EnableAppearanceOddRow = true;  

// 設定偶數行顏色  
gridView1.Appearance.EvenRow.BackColor = Color.WhiteSmoke; 
// 使所有的偶數行 允許 應用 介面上的設定 
gridView1.OptionsView.EnableAppearanceEvenRow = true;  

31、刪除選中行,新增行

刪除選中行, 可通過DeleteSelectedRows()方法,

新增行, 可通過AddNewRow()方法;

具體示例程式碼如下:

if (gridView1.SelectedRowsCount > 0)
{
     gridView1.DeleteSelectedRows();
}

32、設定只讀屬性

通過OptionColumnreadOnly屬性,把某一列設定為只讀屬性;

gridView1.Columns[0].OptionsColumn.ReadOnly = true;

33.合併表頭

介面操作,如圖所示:

程式碼操作如下:

示例程式碼1:

		private DevExpress.XtraGrid.Views.BandedGrid.BandedGridView bandedGridView1;
        private DevExpress.XtraGrid.Views.BandedGrid.GridBand gridBand1;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn gridColumn1;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn gridColumn2;
        private DevExpress.XtraGrid.Views.BandedGrid.GridBand gridBand2;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn gridColumn3;
        private DevExpress.XtraGrid.Columns.GridColumn gridColumn5;
	    private DevExpress.XtraGrid.GridControl gridControl1;

		private void InitializeComponent(){
            this.gridControl1 = new DevExpress.XtraGrid.GridControl();

            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();

            this.gridColumn5 = new DevExpress.XtraGrid.Columns.GridColumn();

            this.bandedGridView1 = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridView();

            this.gridColumn1 = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            this.gridColumn2 = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            this.gridColumn3 = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();

            this.gridBand1 = new DevExpress.XtraGrid.Views.BandedGrid.GridBand();
            this.gridBand2 = new DevExpress.XtraGrid.Views.BandedGrid.GridBand();

            ((System.ComponentModel.ISupportInitialize)(this.gridControl1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.bandedGridView1)).BeginInit();

            this.SuspendLayout();

            // gridControl1
            this.gridControl1.Location = new System.Drawing.Point(74, 46);
            this.gridControl1.MainView = this.bandedGridView1;
            this.gridControl1.Name = "gridControl1";
            this.gridControl1.Size = new System.Drawing.Size(400, 200);
            this.gridControl1.TabIndex = 0;
            this.gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
            this.bandedGridView1});

            // button1
            this.button1.Location = new System.Drawing.Point(88, 333);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 1;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);

            // button2
            this.button2.Location = new System.Drawing.Point(273, 332);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(75, 23);
            this.button2.TabIndex = 2;
            this.button2.Text = "button2";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Click += new System.EventHandler(this.button2_Click);

            // gridColumn5
            this.gridColumn5.Name = "gridColumn5";

            // bandedGridView1
            this.bandedGridView1.Bands.AddRange(new DevExpress.XtraGrid.Views.BandedGrid.GridBand[] {
            this.gridBand1,
            this.gridBand2});
            this.bandedGridView1.Columns.AddRange(new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn[] {
            this.gridColumn1,
            this.gridColumn2,
            this.gridColumn3});
            this.bandedGridView1.GridControl = this.gridControl1;
            this.bandedGridView1.Name = "bandedGridView1";

            // gridColumn1
            this.gridColumn1.Caption = "Name";
            this.gridColumn1.Name = "gridColumn1";
            this.gridColumn1.Visible = true;

            // gridColumn2
            this.gridColumn2.Caption = "Sex";
            this.gridColumn2.Name = "gridColumn2";
            this.gridColumn2.Visible = true;

            // gridColumn3
            this.gridColumn3.Caption = "Age";
            this.gridColumn3.Name = "gridColumn3";
            this.gridColumn3.Visible = true;

            // gridBand1
            this.gridBand1.Caption = "gridBand1";
            this.gridBand1.Columns.Add(this.gridColumn1);
            this.gridBand1.Columns.Add(this.gridColumn2);
            this.gridBand1.Name = "gridBand1";
            this.gridBand1.VisibleIndex = 0;
            this.gridBand1.Width = 150;

            // gridBand2
            this.gridBand2.Caption = "gridBand2";
            this.gridBand2.Columns.Add(this.gridColumn3);
            this.gridBand2.Name = "gridBand2";
            this.gridBand2.VisibleIndex = 1;
            this.gridBand2.Width = 75;

            // Form8
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(590, 429);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.gridControl1);
            this.Name = "Form8";
            this.Text = "Form8";
            ((System.ComponentModel.ISupportInitialize)(this.gridControl1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.bandedGridView1)).EndInit();
            this.ResumeLayout(false);
        }

示例程式碼2:

///   初始化表格

using DevExpress.XtraGrid.Columns; 
using DevExpress.XtraGrid.Views.Base; 
using DevExpress.XtraGrid.Views.BandedGrid; 
using DevExpress.XtraEditors.Repository;   
      
private void InitGrid(){ 
    // advBandedGridView1 是表格上的預設檢視,
    // 注意這裡宣告的  是:BandedGridView        
    BandedGridView view = advBandedGridView1 as BandedGridView;             
    
    // 開始檢視的編輯,防止觸發其他事件             
    view.BeginUpdate(); 
    
    // 開始資料的編輯  
    view.BeginDataUpdate(); 
         
    view.Bands.Clear();

    // 因為有Band列了,所以把ColumnHeader隱藏             
    view.OptionsView.ShowColumnHeaders = false;                         

    // 新增列標題                 
    GridBand bandID = view.Bands.AddBand("ID");             
    // 隱藏ID列             
    bandID.Visible = false; 

    // 這是合併表頭居中顯示
    GridBand bandName = view.Bands.AddBand("姓名"); 
    GridBand bandSex = view.Bands.AddBand("性別");             
    GridBand bandBirth = view.Bands.AddBand("出生日期");             
    GridBand bandScore = view.Bands.AddBand("分數");             
    GridBand bandMath = bandScore.Children.AdBand("數學");             
    GridBand bandChinese = bandScore.Children.AddBand("語文");             
    GridBand bandEnglish = bandScore.Children.AddBand("英語");             
    GridBand bandSubTotal = bandScore.Children.AddBand("小計");             
    GridBand bandRemark = view.Bands.AddBand("備註");
    bandFile.AppearanceHeader.TextOptions.HAlignment = 
    DevExpress.Utils.HorzAlignment.Center; 
             
    // 結束資料的編輯             
    view.EndDataUpdate();
    
    // 結束檢視的編輯     
    view.EndUpdate();   
}

具體可參看:  

DevExpress GridControl 合併表頭