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