天天看點

DevExpress GridControl使用方法

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

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

二、如何新增一條記錄

(1)、gridView.AddNewRow()

(2)、實作gridView_InitNewRow事件

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

gridView.populateColumns();

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

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

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

五、如何禁用GridControl中單擊列彈出右鍵菜單

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

六、如何隐藏GridControl的GroupPanel表頭

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

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

過濾器如下圖所示:

DevExpress GridControl使用方法總結

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

八、如何在查詢得到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);

Rectangle r = new Rectangle(e.Bounds.Top + 5, e.Bounds.Left + 5, e.Bounds.Right - 5, e.Bounds.Height - 5);

e.Graphics.DrawString(str, f, Brushes.Black, r);

}

//方法二(此方法為GridView沒有設定資料源綁定時,使用,一般使用此種方法)

if (this._flag)

if (this.gridView1.RowCount == 0)

Rectangle r = new Rectangle(e.Bounds.Left + 5, e.Bounds.Top + 5, e.Bounds.Width - 5, e.Bounds.Height - 5);

九、如何顯示水準滾動條?

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

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

設定 this.gridView.MoveFirst()

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

設定 this.gridView.MoveNext()

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

設定 this.gridView.MoveLast()

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

this.gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;

this.gridView1.OptionsBehavior.Editable = false;

this.gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;

十四、如何顯示行号?

this.gridView1.IndicatorWidth = 40;

//顯示行的序号

private void gridView1_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)

if (e.Info.IsRowIndicator && e.RowHandle>=0)

e.Info.DisplayText = (e.RowHandle + 1).ToString();

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

設定gridView1.OptionsCustomization.AllowColumnMoving = false;

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

設定gridView1.OptionsCustomization.AllowSort = false;

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

設定gridView1.OptionsCustomization.AllowColumnResizing = false;

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE

DEV控件:gridControl常用屬性設定

2011-01-19 09:50

1.隐藏最上面的GroupPanel

gridView1.OptionsView.ShowGroupPanel=false;

2.得到目前標明記錄某字段的值

sValue=Table.Rows[gridView1.FocusedRowHandle][FieldName].ToString();

3.資料隻讀

gridView1.OptionsBehavior.Editable=false;

4.不顯示MasterDetailView

gridView1.OptionsDetail.EnableMasterViewMode=false;

5.修改最上面的GroupPanel内容

gridView1.GroupPanelText="柳生飄絮";

6.設定資料源:

gridControl1.DataSource = dt;

綁定每一列的FiledName--屬性

對于Oracle資料庫,所有的在設計器裡寫的程式中的字段名必須大寫,否則可能綁定不上字段,sqlserver沒有這個限制.

7.讀寫拷貝權限設定

隻讀不可拷貝:

ColumnViewOptionsBehavior.Editable = False

隻讀可拷貝:

ColumnViewOptionsBehavior.Editable = True

OptionsColumn.AllowEdit = True

OptionsColumn.ReadOnly = True

可編輯:

OptionsColumn.ReadOnly = False

8.模闆列的設定:

到Columns中,在他的屬性中找到ColumnEdit.

以LookUpEdit為例:

首先從Designer左邊菜單In-PlaceEditor Repository中添加LookUpEdit.取名為Re1.然後.在他的Columns屬性中添加3列.Caption依次為:編号,姓名,性别.FieldName依次為:FID,FNAME,FSEX.然後将Re1的NullText設定成空.

  AutoSearchColumnIndex屬性設定為2.ImmediatePopup屬性設定為True.

  SearchMode設定為OnlyInPopup.

  然後将這個模闆列附加到我們上面提到的列1(也就是将列1的ColumnEdit屬性設成Re1)

  最後我們還要在代碼裡面給Re1綁定資料源和顯示項.

Re1.DataSource =DALUse.Query("select fid,fname,fsex from dual").Tables[0];

Re1.DisplayMember ="FSEX";

Re1.ValueMember ="FNAME";

9.設某一列文字和标題局中顯示

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

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

10.去掉某一列上面的自動篩選功能(Filter)

gridView1.Columns[0].OptionsFilter.AllowAutoFilter = false;

gridView1.Columns[0].OptionsFilter.AllowFilter =false;

gridView1.Columns[0].OptionsFilter.ImmediateUpdateAutoFilter =false;

11.設定當機列(左當機)

gridView1.Columns[0].Fixed= DevExpress.XtraGrid.Columns.FixedStyle.Left;

12.得到單元格資料(0行0列)

string ss=gridView1.GetRowCellDisplayText(0,gridView1.Columns[0]);

string ss = gridView1.GetRowCellValue(0, gridView1.Columns[0]);

13.設定單元格資料(将0行0列的單元格指派123)

gridView1.SetRowCellValue(0, gridView1.Columns[0],"123");

13.手動添加dev的列

DevExpress.XtraGrid.Columns.GridColumn Col1=newDevExpress.XtraGrid.Columns.GridColumn ();

Col1.FieldName="FID";

Col1.Visible=true;

Col1.VisibleIndex=gridView1.Columns.Count;

gridView1.Columns.Add(Col1);

14.設定自動增加的行号,需要先添加給gridview添加事件CustomDrawRowIndicator

15.删除: (修改了dgvdel裡的datagridviewdel方法)

public static voiddatagridviewdel_Dev(DevExpress.XtraGrid.Views.Grid.GridView Mydgv)

if (MessageBox.Show("你确定要删除選中的記錄嗎?", "删除提示",MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, 0, false) == DialogResult.Yes)

intiSelectRowCount = Mydgv.SelectedRowsCount;

if(iSelectRowCount > 0)

Mydgv.DeleteSelectedRows();

新增: (對于新增,其本身的AddNewRow方法就可以做到)

private void btn_add_Click(object sender, EventArgs e)

gridView1.AddNewRow();

具體如果對于新加行還有什麼特别的設定,可以在它gridView1_InitNewRow事件中填寫:

private void gridView1_InitNewRow(object sender,DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)

ColumnView View = sender as ColumnView;

View.SetRowCellValue(e.RowHandle,View.Columns[0],gridView1.GetRowCellValue(gridView1.GetRowHandle(gridView1.RowCount - 2),gridView1.Columns[0])); //複制最後一行的資料到新行

儲存 (第三方控件提供的RefreshData和RefreshDataSource方法對于儲存資料都不好使,最後還是使用了Dgvsave的datagridviewsave方法,用這個方法就可以)

18.特效:gridcontrol中有5種view 型式,普通的是gridview,然後分别為cardview、BandedView、AdvancedBandedView、LayoutView;共5種。

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

2)、layoutView1.OptionsCarouselMode.PitchAngle 這個屬性決定“旋轉木馬”的pitch angle 螺距角; 螺旋角; 螺旋升角; 俯仰角; 傾角; 節錐半角

3)、Roll Angle 屬性決定着 傾側角度

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

//顯示資料

private voidshowData(List<Employee > list)

DataTable dt= new DataTable("OneEmployee");

dt.Columns.Add("Caption", System.Type.GetType("System.String"));

dt.Columns.Add("Department",System.Type.GetType("System.String"));

dt.Columns.Add("PhotoName",System.Type.GetType("System.Byte[]"));

19.檢查資料的有效性

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

#region 檢查資料

private void gridView1_ValidateRow(object sender, ValidateRowEventArgse)

GridView view = sender as GridView;

view.ClearColumnErrors();

if (view.GetRowCellValue(e.RowHandle, "ReceiveDate") ==DBNull.Value)

e.Valid = false;

view.SetColumnError(view.Columns["ReceiveDate"], "必須指定日期");

#endregion

調用gridview.UpdateCurrentRow()方法執行檢查

最常用的DevExpress Winform 4個代碼片段:

一 、GridControl的删除操作

private void rILinkEditInfoDel_Click(object sender, EventArgs e)

if (XtraMessageBox.Show("請确定是否删除目前記錄?", "警告",MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)

DataRow row =gvInfos.GetDataRow(gvInfos.FocusedRowHandle);

delByCode(row["Code"].ToString());

XtraMessageBox.Show("操作成功!");

二、綁定非資料表中列

Hashtable ht = new Hashtable();

private void gridView6_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgse)

GridView View = sender as GridView;

if (e.RowHandle >= 0)

object needAlert =View.GetRowCellValue(e.RowHandle, View.Columns["needAlert"]);

if (needAlert != null &needAlert != DBNull.Value && needAlert.ToString().Trim() !="0" & View.GetRowCellValue(e.RowHandle,View.Columns["Value"]) != DBNull.Value)

decimal AverValue = Convert.ToDecimal(View.GetRowCellValue(e.RowHandle,View.Columns["Value"]));

objectMinValue = View.GetRowCellValue(e.RowHandle,View.Columns["MinValue"]);

objectMaxVlaue = View.GetRowCellValue(e.RowHandle,View.Columns["MaxValue"]);

if(MinValue != DBNull.Value & MinValue != null & MaxVlaue.ToString() !="" & MaxVlaue != DBNull.Value && MaxVlaue != null &MaxVlaue.ToString() != "")

decimal gridColumn2 = Convert.ToDecimal(View.GetRowCellValue(e.RowHandle,View.Columns["MinValue"]));

decimal gridColumn1 = Convert.ToDecimal(View.GetRowCellValue(e.RowHandle,View.Columns["MaxValue"]));

if (gridColumn2 > AverValue || AverValue > gridColumn1)

if (!ht.ContainsKey("pic"))

ht.Add("pic", GetImage(1));

e.Value = ht["pic"];

/// <summary>

/// 由資源檔案擷取圖檔

/// </summary>

/// <param name="key"></param>

/// <returns></returns>

byte[] GetImage(int key)

Image img =DevExpress.Utils.Controls.ImageHelper.CreateImageFromResources(string.Format("RiverSys.Resources.{0}.gif",key.ToString()), typeof(RiverInfos).Assembly);

returnDevExpress.XtraEditors.Controls.ByteImageConverter.ToByteArray(img,ImageFormat.Gif);

/// 動态根據條件設定行樣式

/// <param name="sender"></param>

/// <param name="e"></param>

private void gridView6_RowStyle(object sender,DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)

decimal AverValue = Convert.ToDecimal(View.GetRowCellValue(e.RowHandle, View.Columns["Value"]));

decimal gridColumn2 = Convert.ToDecimal(MinValue);

decimal gridColumn1 = Convert.ToDecimal(MaxVlaue);

e.Appearance.ForeColor = Color.Red;

e.Appearance.BackColor = Color.LightGray;

三、GridControl 中顔色選擇控件

private void gvMapColor_CustomUnboundColumnData(object sender,DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)

DataView dv = view.DataSource as DataView;

if (e.IsGetData)

string strVal =dv[e.ListSourceRowIndex]["Color"].ToString();

if (strVal != "")

//e.Value = DevExpress.Utils.StyleLayout.ColorFromString(strVal);

e.Value = Common.HexToColor(strVal);

else

//Color colorVal =DevExpress.Utils.StyleLayout.ColorFromString(e.Value.ToString());

Color colorVal =(Color)e.Value;

dv[e.ListSourceRowIndex]["Color"] =Common.RGB_HEX(colorVal.ToArgb());

四、關于 GridControl 驗證示例

/**//// <summary>

/// 初始化GridView,綁定資料

/// <param name="parentId"></param>

private void GridViewBindData(string parentId)

this.gridView1.Columns.Clear();

this.FDs= areaSetupActionHelper.getDsRegionByParentId(parentId);

this.gridCArea.DataSource =this.FDs.Tables[0].DefaultView;

/// gridView單元格驗證的相關處理程式

private void gridView1_ValidatingEditor(objectsender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)

if (e.Valid == false&this.gridView1.FocusedColumn.FieldName =="reg_id")

e.ErrorText = "區劃編号不合法!\n應為父區劃編号加2~3位資料組成!";

if (this.gridView1.FocusedColumn.FieldName =="reg_name")

Regex reg=new Regex(@"[\u4e00-\u9fa5]{1,20}");

Match m=reg.Match(e.Value.ToString().Trim());

if (m.Length != e.Value.ToString().Trim().Length)

e.ErrorText = "區劃名稱應為漢字\n長度為1至20";

private void gridView1_InvalidValueException(objectsender, InvalidValueExceptionEventArgs e)

if (MyDialog.Alert(" 您所填寫的内容不符合規則\n 要放棄您剛才對此項所做的更改嗎?", "您所編輯的内容不符合規則", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) ==DialogResult.Yes)

e.ExceptionMode = ExceptionMode.Ignore;

/// gridView行驗證的相關處理程式

private void gridView1_ValidateRow(objectsender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)

string regid = this.gridView1.GetRowCellValue(e.RowHandle,"reg_id").ToString().Trim();

string regName = this.gridView1.GetRowCellValue(e.RowHandle,"reg_name").ToString().Trim();

if ( regid.Length < 1)

this.gridView1.SetColumnError(this.gridView1.Columns["reg_id"],"請填寫區劃編号!",DevExpress.XtraEditors.DXErrorProvider.ErrorType.Default);

// e.ErrorText = "區劃名稱不能為空!";

if (regName.Length < 1)

this.gridView1.SetColumnError(this.gridView1.Columns["reg_name"],"區劃名稱不能為空!",DevExpress.XtraEditors.DXErrorProvider.ErrorType.Default);

private void gridView1_InvalidRowException(object sender,DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)

關于XtraGrid的使用(GridControl小結)來源:51程式設計網釋出時間:2010-04-19Hits:146

DevExpress XtraGrid的使用(AspxGridControl小結) 收藏

自定義焦點行的方法: gridView_bcode.FocusedRowHandle = focuseRowInt; //通過設定GridView 的FocusedRowHandle屬性

view plaincopy to clipboardprint?

//擷取焦點行任意單元格的資料

ColumnView cv = (ColumnView)gridControl_Gongzi.FocusedView;//重新擷取此ID 否則無法從表頭連删擷取不到id

int focusedhandle = cv.FocusedRowHandle;

object rowIdObj = gridView1.GetRowCellValue(focusedhandle,"id");

if (DBNull.Value != rowIdObj)

FocusedRow_id = Convert.ToInt32(rowIdObj);

object rowIdObj = gridView1.GetRowCellValue(focusedhandle, "id");

//當資料發生變化時執行

private void gridView1_CellValueChanged(object sender,CellValueChangedEventArgs e)

int intRowHandle =e.RowHandle;

FocusedRow_bumen =Convert.ToString(gridView1.GetRowCellValue(intRowHandle,"bumen"));

FocusedRow_xingming =Convert.ToString(gridView1.GetRowCellValue(intRowHandle,"xingming"));

//FocusedRow_jibengongzi =Convert.ToDecimal(gridView1.GetRowCellValue(intRowHandle,"jibengongzi"));

object rowJibengongziObj =gridView1.GetRowCellValue(intRowHandle, "jibengongzi");

if (DBNull.Value !=rowJibengongziObj)

FocusedRow_jibengongzi = Convert.ToDecimal(rowJibengongziObj);

private voidgridView1_CellValueChanged(object sender, CellValueChangedEventArgs e)

int intRowHandle= e.RowHandle;

FocusedRow_bumen = Convert.ToString(gridView1.GetRowCellValue(intRowHandle,"bumen"));

FocusedRow_xingming = Convert.ToString(gridView1.GetRowCellValue(intRowHandle,"xingming"));

objectrowJibengongziObj = gridView1.GetRowCellValue(intRowHandle,"jibengongzi");

if(DBNull.Value != rowJibengongziObj)

} view plaincopy toclipboardprint?

//設定焦點行的焦點單元格的位置

ColumnView view = (ColumnView)gridControl_Gongzi.FocusedView;

view.FocusedColumn = view.Columns["bumen"];

view.FocusedColumn = view.Columns["bumen"]; view plaincopy toclipboardprint?

//當焦點行發生改變時執行 擷取選中焦點行id

private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgse)

int intRowHandle =e.FocusedRowHandle;

private void gridView1_FocusedRowChanged(object sender,DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)

intintRowHandle = e.FocusedRowHandle;

//焦點行的FocusedHandle為:

FocuseRow_Handle = -999998;

//擷取焦點行的handle

ColumnView newview = (ColumnView)gridControl_Gongzi.FocusedView;

//回車添加新行

private void gridView1_KeyPress(object sender, KeyPressEventArgse)