c#開發_Dev的關於XtraGrid的使用(GridControl小結)_First


1,增加新行用InitNewRow事件,給新行某字段賦值。后結束編輯。

private void grdView_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
    {
     DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView;
     view.SetRowCellValue(e.RowHandle, view.Columns["EnterID"], this.dS_MEnterStoreView.MEnterStore[0].ID);
     this.grdControl.EmbeddedNavigator.Buttons.EndEdit.DoClick();
     this.grdView.UpdateCurrentRow();
    }
 

2,如果進行行驗證,就在換行時時行,用grdView_FocusedRowChanged事件

private void grdView_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
    {
     WsClient.WS_MEnterStore.DS_MEnterStoreView.MEnterDetailRow row = (WsClient.WS_MEnterStore.DS_MEnterStoreView.MEnterDetailRow)this.grdView.GetDataRow(e.FocusedRowHandle);
    
     if (row != null)
     {
      if ((this.OperState == Common.Enum.TOperState.UnConfirmNew)
       || (this.OperState == Common.Enum.TOperState.UnConfirmEdit))
      {
       this.InitComboBoxValue(row, row.IsGoodIDNull()?0:row.GoodID, false);
       this.InitBatchComboBoxValue(row, row.IsGoodIDNull()?0:row.GoodID, false);
      }
     }
    }
 

3,如果需要改變行的某一列的同時改變其它的列用grdView_CellValueChanged事件

private void grdView_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
    {
     if (this.grdView.FocusedColumn == e.Column)
     {
 if (e.Column == this.colAmount)
      {
     }
 }
 }
 

4,如果需在離開行的時候需要驗證,則用grdView_BeforeLeaveRow事件.

 

DevExpress XtraGrid的功能實在強大,剛使用的時候看到一大片屬性設置,分不清東南西北,參照demo和使用中的一些經驗,記錄一下使用方法。現在數據庫訪問都使用ORM技術了,對於DataSouce綁定以下是以IList為說明對象。

控件基本定義   DevExpress.XtraGrid.GridControl gridControl1;

1數據綁定(IList

DevExpress.XtraGrid.Views.Grid.GridView gridView1;
 IList<MyClass> list = new BindingList<MyClass>();
 //初始list
 list.Add(A);
 list.Add(B);
 ………..
 gridControl1.DataSource = list;
 

2Grid上編輯數據

修改屬性gridView1.OptionsView.NewItemRowPosition,設為TopBottom可以在Grid上添加數據。

(在demo中原文:a record object must be inherited from the IEditableObject class if you need the ability to cancel newly added records via the grid

譯:如果你需要通過gird取消新建的記錄,你的記錄對象必須實現IEditableObject


 

(注:在測試中,感覺不需要繼承IEditableObject,在grid編輯后也能實現取消。demo通過實現IEditableObjectBeginEditCancelEdit方法,數據編輯后恢復特定數據。不使用grid直接修改數據,可以考慮這種恢復原數據的方法。)

 

3、 修改列(Column)格式

DevExpress.XtraGrid.Columns.GridColumn col = gridView1.Columns[0];

數據對齊方式 col.AppearanceCell.TextOptions.HAlignment, 默認值Default,可選值Default/Near/Center/Far。

說明:以下情況是基於從左到右的文字排列;若是從右到左,用法相反。

Default:數據默認的對齊方式

Near:左對齊

Center:居中對齊

Far:右對齊

 

列標題 col.Caption

對應綁定數據的屬性 col.FieldName

排列順序 col.VisibleIndex

格式化顯示數據

Col.DisplayFormat.FormatType

Col.DisplayFormat.Format

Col.DisplayFormat.FormatString

區別:FormatType/FormatString 使用當前系統的語言區域設置,Format使用特定的

 

4、 使用Grid內置導航欄

gridControl1.UseEmbeddedNativgator=True

設定內置導航欄按鈕其他屬性 gridControl1.EmbeddedNavigator


 

5 GridView內置方式編輯數據


 

禁止編輯數據 gridView1.OptionsBehavior.Editable = False,默認是True 可編輯。

Gridview內置數據編輯器顯示方式 gridView1.OptionsBehavior.EditorShowMode,可選值Default/ MouseDown/MouseUp/ Click

說明:

Default 多選Cell相當於Click,單選Cell相當於MouseDown

MouseDown 在單元格內按下鼠標鍵時打開內置編輯器

MouseUp 在單元格內釋放鼠標鍵時打開內置編輯器

Click 在不是編輯狀態,但獲得焦點的單元格中點擊時打開編輯器。點擊非焦點單元格時,首先會切換焦點,再點擊時才打開編輯器


 

6、 設定GrideView單元格的內置編輯器

Run DesignerColumns選中需要變更編輯方式的Column,在ColumnEdit 屬性的下拉菜單中選擇編輯數據使用的控件。

1Person表的CountryID字段的值來自Country表,使用下拉列表顯示CountryName編輯


 

修改CountryIDColumn.ColumnEdit值,選new->LookupEdit,默認命名為repositoryItemLookUpEdit1。展開ColumnEdit屬性,將DisplayMember 設為CountryNameDropDownRows是下拉列表的行數,ValueMember設為CountryID

代碼中添加:

//init data

repositoryItemLookUpEdit1.DataSource = ds.Tables[Country];


 

例2:字段Age是整型,需要使用SpinEdit編輯

修改AgeColumn.ColumnEdit值,選new->SpinEdit。展開ColumnEdit屬性,修改MaxValue、MinValue設定最大、最小值。運行時Age的取值只能在MaxValue至MinValue之間選值。

 

7、 GridView調節行高顯示大文本


 

默認情況下gridview已單行方式顯示,過長的文本只能顯示開頭部分,鼠標停留在單元格上方有ToolTip顯示所有文本。在文本單元格的右邊兩個按鈕供切換顯示上下行。若需要在單元格變更行高顯示所有文本。使用

gridView1.OptionsView.RowAutoHeight = True;

gridView1.LayoutChanged();

private void gridView1_CalcRowHeight(object sender,DevExpress.XtraGrid.Views.Grid.RowHeightEventArgs e) 
 {
 if(e.RowHandle >= 0)
 e.RowHeight = (int)gridView1.GetDataRow(e.RowHandle)["RowHeight"];
 }
 

8、 數據導出

XtraGrid支持HtmlXmlTxtXsl導出,對應的導出器是ExportHtmlProviderExportXmlProviderExportTxtProviderExportXslProvider

例:使用html格式導出數據

IExportProvider provider = new ExprotHtmlProvider(filename);
 ExportTo(provider);
 ……
 private void ExportTo(IExportProvider provider) {
             Cursor currentCursor = Cursor.Current;
             Cursor.Current = Cursors.WaitCursor;
 
  
             this.FindForm().Refresh();
             BaseExportLink link = gridView1.CreateExportLink(provider);
             (link as GridViewExportLink).ExpandAll = false;
             link.Progress += new DevExpress.XtraGrid.Export.ProgressEventHandler(Export_Progress);//進度條事件
             link.ExportTo(true);
             provider.Dispose();
             link.Progress -= new DevExpress.XtraGrid.Export.ProgressEventHandler(Export_Progress);  
             Cursor.Current = currentCursor;

 }
 

9、 焦點單元格顯示方式

GrideView默認的焦點單元格顯示方式是整行選中,焦點單元格高亮。可以調整以下屬性進行修改

gridView1.FocusRectStyle :焦點繪畫方式 默認DrawFocusRectStyle.CellFocus(單元格)/ DrawFocusRectStyle.RowFocus(行)/ DrawFocusRectStyle.None(不繪畫)

bool gridView1.OptionsSelection.EnableAppearanceFocusedCell :是否焦點顯示選中的單元格

bool gridView1.OptionsSelection.EnableAppearanceFocusedRow :是否焦點顯示選中的行

bool gridView1.OptionsSelection.InvertSelection :是否反顯示

bool gridView1.OptionsSelection.MultiSelect:是否使用多選

 

10
顯示非數據源的數據

可以在GrideView上增加數據源沒有的列,如合計、日期、序號或其他數據源等。

方法一:實現CustomColumnDisplayText事件(只能用於顯示)

以下例子在bandedGridColumn1上顯示 FirstName+LastName

 bandedGridColumn1.OptionsColumn.AllowEdit = false;
 private void bandedGridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
 {
      if(e.Column.Equals(bandedGridColumn1)) 
 {
          DataRow row = bandedGridView1.GetDataRow(e.RowHandle);
          e.DisplayText = string.Format("{0} {1}", row["FirstName"], row["LastName"]);
      } 
 }
 

 

方法二: 設定列的UnboundType,並實現CustomUnboundColumnData事件(可修改值)

以下例子演示DateTime/Int/String 綁定到數據列上顯示。當修改 GrideView上的值時,將修改同步到原數組中。

 bandedGridColumn4.UnboundType = DevExpress.Data.UnboundColumnType.DateTime;
 bandedGridColumn5.UnboundType = DevExpress.Data.UnboundColumnType.Integer;
 bandedGridColumn6.UnboundType = DevExpress.Data.UnboundColumnType.String;
 
  
 private void bandedGridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e) {
               if(array == null) return;
               if(e.ListSourceRowIndex >= array.Count) return;
               Record rec = array[e.ListSourceRowIndex] as Record;
               if(rec == null) return;
               switch(e.Column.UnboundType) {
                    case UnboundColumnType.DateTime:
                        if(e.IsGetData)
                             e.Value = rec.Date;
                        else rec.Date = (DateTime)e.Value;
                        break;
                    case UnboundColumnType.Integer:
                        if(e.IsGetData)
                             e.Value = rec.Count;
                        else rec.Count = (Int32)e.Value;
                        break;
                    case UnboundColumnType.String:
                        if(e.IsGetData)
                             e.Value = rec.Comment;
                        else rec.Comment = e.Value.ToString();
                        break;
               }
          }
 

提交當前行的修改

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);
     }
 }
 

就寫到這里吧,太長看得眼睛很累的
提供下關於GridControl的心得_Second鏈接http://www.cnblogs.com/stephen-vv/archive/2012/12/18/2822891.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM