DevExpress_常用控件24_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;

 

补充一句:

ColumnAutoWidth 为true时,则表示: 各列的宽度自动调整

 

b. 列表宽度自适应内容

gridview1.BestFitColumns();


创建一种使用TreeList控件的基窗体时,

外观层中调用BestFitColumns()不起作用,

原因是TreeList控件还未添加到实际的窗体中,它还不知道自己的大小,

所以它的列无法按内容自适应宽度,

把它移到基窗体的添加TreeList控件之后,此时还是不成功,

在添加TreeList控件之后和调用BestFitColumns()之前,

调用TreeList控件的ForceInitialize(),这样BestFitColumns()就起作用了。

这样它的意思就是TreeList控件首先已经添加到窗体,

然后本身也我完成了初始化,然后它才能按内容自适应宽度,


项目中界面不仅仅是在窗体里画的,窗体的基类里实际上只画了大体的布局控件

(每种布局就表示一种类型的父窗体,实际业务的子窗体继承适合自己的父窗体)

将窗体画分了各个区域,每个区域中的控件是由一个叫做所谓的外观层创建的

(这个外观层比设计模式和其他开源等项目中的外观层意义不大一样,比它们要复杂得多)

每种窗体基类只要访问外观的对象获得控件添加到相应区域就行,其他的什么都不做,

与控件相关的事件和像下拉框中的编辑项都由外观层的相应类完成,

实际业务子窗体给外观的各对象赋值就行,

业务逻辑层的对象必须实现自己需要实现的接口,

因为外观层中只知道这些接口,这样实现简单创建界面的同时还实现了界面层和业务层的低耦合


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 dataTable = new DataTable();
            dataTable.Columns.Add("Name", System.Type.GetType("System.String"));
            dataTable.Columns.Add("Sex", System.Type.GetType("System.String"));
            dataTable.Columns.Add("Age", System.Type.GetType("System.String"));

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

           // 绑定字段
           gridView1.Columns[1].FieldName = "Sex";
           gridView1.Columns[2].FieldName = "Age";
           gridView1.Columns[0].FieldName = "Name";
           
           gridControl1.DataSource = dataTable;

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