DXperience GridControl 使用笔记
GridControl
关于数据绑定:明细部分数据赋值的时候不需要象MultilRow那样逐行赋值,它只需要绑定数据集就可以了,在DataSet里需要对应字段名,这样在SetRowCellValue或者GetRowCellValue里指定的Columns[“xx”]才能设置或取到正确的数据
在SetRequestData里用记录集收集数据,而不需要象MultilRow取明细中的值,要注意的是在行离开的时候最好用到View的UpdateCurrentRow方法用语更新记录集
在GetResponseData直接用GridControl 的DataSource绑定到传回的记录集上,如果有显示不正确的说明在DataSet里或着Columns的FiledName不正确
明细选择不要背景 Appearance FocuseRow HideSelectionRow
内部Enter能跳动 GridView OptionsNavigation EnterMoveNextColoumnTrue
GridView设置
IndicatorWidth 行头的宽度设置
Tab键可用:OptionsBehaviorFocusLeaveOnTab True
设置列是否可移动,可筛选,可排序:OptionsCustomizationAllowColumnMovingFalse AllowFilterFalse AllowSortFalse
光标进入单元格而不是整行的设置:OptionsSelect EnableApppearanceFocusedRow False MultiSelectCellSelect
明细进入处于编辑状态:OptionsSelectionEnableAppearanceFocuseRowFalse MultiSelectModeCellSelect
Columns的设置 ColumnEdit设置列的类型比如combox
FieldName 填充的字段名
列的操作OptionsColumn AllowEdit,AllowFocus,ReadOnly,TabStop
数字型注意设置DisplayFormat,对齐方式一般是右对齐设置在AppearanceCellTextOptionsHAlignmentFar,数字型有时候需要清空处理,赋成空会出现错误,要赋成Null就需要设置ColumnEditAllowNullInputTrue
有多个明细不出现Tab选项上面文字 OptionsDetailShowDetailTabs False
一次只展开一个明细的数据 OptionsDetailAllowOnlyOneMasterRowExpanded True
Combox在明细没有显示出来 ShowButtonMode ShowAlways 初始化的时候也需要加载数据
检索画面需要单双行颜不一致 OptionsView EnableAppearanceEvenRow True 在设计代码中加上皮肤颜
NumberSpinTextBox
Properties DisplayFormat,EditFormat 设置Numeric
EditMask设置d Mask EditMask设置d
MaxValue,MinValue
DateTextBox
Properties DisplayFormat,EditFormat 设置DataTime
Mask UseMaskAsDisplayFormat True
MaxValue,MinValue
GridView事件
CustomDrawRowIndicator用于处理行头的自动编号
InvalidRowException 用于只捕捉自定义异常,如果不写这个事件的话,如果列输入的格式不正确的话系统会自动报出输入的字符串格式不正确,但这个是它内部捕捉的,这个不要让它报出来就在这个事件里写
ValidateRow 用于行离开时处理,列本身长度的控制是MaxLength,但这个是字符长度,通常需要按字节截取,行离开的时候字节截取就在这个事件处理;判断数据合法性也在这个事件处理,需要注意的是在之前调用View的CloseEditor()用于关闭编辑状态,如果没用这方法的话会出现有时行离开取不到之前的值最后需要刷新记录集UpdateCurrentRow()
ValidatingEditor 用于处理正在编辑离开处理,这个事件可以用来处理合法性的判断,但它只能捕捉到有值改变的情况下,如果是直接是空离开,是不触发的,如果是有值的情况再改变成空是可以触发的
TextEdit事件
控件的Enter事件
如this.LastText = this.ViewMaterial.GetRowCellValue(this.ViewMaterial.FocusedRowHandle, "MaterialID").ToString();
控件的Leave事件
用于如ID离开取出相应的名称,或者补0,或者后面的列清空,注意数字型的清空如果之前设置了允许Null的情况,清空时列的值是赋成null
文本和Combox组合的情况
选择框赋值时注意,选择框没有SelectIndex属性,赋值的时候就用SetRowCellValue(this.ViewMaterial.FocusedRowHandle, ViewMaterial.Columns["UnitName"], bMXUnitName.Items[i])
SelectedIndexChanged 用于处理选择后给文本赋值
SetRowCellValue(this.ViewMaterial.FocusedRowHandle, ViewMaterial.Columns["MXUnitID"], ((DevExpress.XtraEditors.ComboBoxEdit)sender).SelectedItem.ToString().Substring(0, vLength));
事件 Leave 和Validated是不同的,特别是在需要补0的控件,需要使用Validated才会有效果,他们的区别在于Validated是先检验处理,在触发Leave事件,而Leave就只是离开时
gridview不显示需要统一处理的
1. 明细部分移动由Enter改成Tab,设置参照上面的
2. 主的有效明细字段清空时,清空后面的数据
3. 主的有效明细字段为空的时候,不提示错误信息,因为该行不作为数据收集
4. 如果主的有效明细字段不为空的时候,其他有效明细字段为空,提示错误信息
图形说明上述情况:
材料编号作为主的有效明细字段
(2)如果材料编号清空的话,材料名,规格,数量,单位就要清空
(3)如果材料编号为空,就算数量,单位不为空也不提示错误,因为编号没填就不是有效明细
(4)如果材料编号不为空,数量或单位为空,提示错误信息
明细内式样设计:
1. 组合控件:如TextBox+Label+Button或TextBox+ComboBox的字段,字段标题居中显示,字段设计如下所示:
2.数字类型的数据右对齐,数字类型的控件有CalcEdit和SpinEdit,可以通过需求选择,两者的区别
CalcEdit SpinEdit
没有MaxValue和MinValue 可以通过设置MaxValue和MinValue属性设置数字大小
共同点: 设置MaxLength,最大长度, 设置输入格式,Mask→EditMask, 显示格式:DisplayFormat,
画面显示时按显示格式要求显示时:Mask→UseMaskAsDisplayFormat=True,金额计算方式 / 显示格式:SummaryItem→SummaryType / DisplayFormat
2. ComboBoxEdit的使用 ,焦点不能进入:AllowFocus=false,不能进行编辑:TextEditStyle=DisableTextEditor调用该控件的字段的属性设置:OptionsColumn→AllowMove=false,TabStop=false
3. ButtonEdit的使用,只显示按钮:TextEditStyle=HideTextEditor 宽度:Width=22
4. 用于只读控件的属性设置,OptionsColumn 的AllowEdit=false、AllowFocus=false、ReadOnly=True、TabStop=false
4. 明细内部字段和基本的字段设计相同部分按照基本设计修改,明细行高为20(此为默认行高,不需要进行设置)
5. 若无法正好显示明细内行,经确认后再行修改,不得随意按个人意愿修改
关于之前遗留问题解决方案:
1. 明细行离开会把全部错误信息都提示出来,如果某一列已经合法了错误提示信息依然存在,并不能及时清空错误信息,原因是在ValidatingEditor事件没有清空ValidateRow事件时捕捉的错误,办法是在ValidatingEditor事件里,如果合法就清空ValidateRow事件时捕捉的错误清空调用方法如 XX.SetColumnError(this.XX.Columns["Quantity"], "");
2. 关于明细复选框勾选不上的原因,明细复选框的数据源必须是bool型,所以在数据集绑定的字段要设置DataType为System.Boolean,默认是System.String
3. 明细数字用到SpinEdit如果在单元格上下列点击,再关闭窗体出现系统错误,原因是在ValidatingEditor事件中e.Value是null,而用于接受数字值是CastUtility.ToDecimal(e.Value.ToString()),e.Value.ToString()是会转换失败的,解决办法是如果判断当前列是数字的话,先判断e.Value是不是Null在不是Null的情况才进行下面的处理
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论