在DevExpress DXGrid中使用自定义单元格编辑器时,我如何验证单元格?
本文关键字:单元格 何验证 验证 DXGrid DevExpress 编辑器 自定义 | 更新日期: 2023-09-27 18:05:30
我有一个DXGrid,我有一个像这样定义的列
<dxg:GridColumn FieldName="InvType.TypeName" Validate="TypeName_OnValidate" >
<dxg:GridColumn.EditTemplate>
<ControlTemplate>
<dxe:ComboBoxEdit x:Name="PART_Editor" AutoComplete="True"
ItemsSource="{Binding DataContext.InvTypes, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=dxg:GridControl}}"
DisplayMember="TypeName" Validate="BaseEdit_OnValidate"/>
</ControlTemplate>
</dxg:GridColumn.EditTemplate>
</dxg:GridColumn>
每一行显示一个InvType实例,网格不允许在这一列中进行编辑,除非它是新的行项。
简而言之,我希望单元格在被编辑时显示ComboBoxEdit,然后处理GridColumn Validate事件。
问题是GridColumn上的Validate事件没有触发。ComboBoxEdit上的Validate事件确实会触发,但这只提供了一个ValidationEventArgs,而不是我需要的GridCellValidationEventArgs。
是否有任何方法有组合框时编辑,也有GridColumn事件火正确?
编辑:我通过使用EditSettings而不是ContentControl来解决这个问题。
<dxg:GridColumn FieldName="InvType.TypeName" Validate="TypeName_OnValidate">
<dxg:GridColumn.EditSettings>
<dxe:ComboBoxEditSettings AutoComplete="True"
ItemsSource="{Binding DataContext.InvTypes, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=dxg:GridControl}}"
DisplayMember="TypeName" ValueMember="TypeName"/>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
我也做过类似的工作。实际上,您可以创建一个带有验证附加属性的实用程序类(它接受您的dataccolumn,并将处理程序附加到Validate事件)。
用法如下:
<Grid:GridColumn x:Name="EventEndTimeColumn"
Header="Time" Width="40" AllowEditing="True" EditSettings="{dxe:TextSettings HorizontalContentAlignment=Center}" HorizontalHeaderContentAlignment="Center">
<Validator:GridColumnValidationRulesHelper.ValidationRules>
<Validator:GridColumnValidationRules>
<Validator:CustomValidationRule ErrorMessage="Invalid Value"/>
</Validator:GridColumnValidationRules>
</Validator:GridColumnValidationRulesHelper.ValidationRules>
您可以在我的博客中获得验证助手代码。