自从切换到.NET 4.0以来,我遇到了数据输入问题.在我的Xceed 3.7网格中,用户以前能够在单元格中键入值,当它们单击或按回车键时,ConvertBack将调用绑定转换器的方法,解析用户输入值并以所需格式存储.
现在突然间,每次击键都会发生这种情况 - 这会导致一个巨大的问题,因为如果用户删除一个数字并开始输入另一个数字(比如说-100),一旦他们输入了负号,就会发生转换触发并抛出异常,因为" - "不是可解析的字符串,并且该值将被还原.
我认为问题非常明确,所以现在我将粘贴一些代码.
用户输入的列显示如下:
<xcdg:DataGridControl x:Name="AggCatGrid01"
ItemsSource="{Binding Source={StaticResource myDataSource}}" >
<xcdg:DataGridControl.Columns>
...
<xcdg:Column VisiblePosition="0" FieldName="SomeValue" Title="Some Value"
CellEditor="{StaticResource PercentageEditor}"
CellContentTemplate="{StaticResource EditablePercent2CellContentTemplate}" />
Run Code Online (Sandbox Code Playgroud)
Datagrids都具有相同的风格:
<Style x:Key="{x:Type xcdg:DataGridControl}" TargetType="{x:Type xcdg:DataGridControl}">
<Setter Property="UpdateSourceTrigger" Value="CellEndingEdit"/>
<Setter Property="AutoCreateColumns" Value="False"/>
<Setter Property="EditTriggers" Value="BeginEditCommand, CellIsCurrent, ActivationGesture"/>
<Setter Property="CellEditorDisplayConditions" Value="CellIsCurrent"/>
<Setter Property="NavigationBehavior" Value="CellOnly"/>
Run Code Online (Sandbox Code Playgroud)
请注意,UpdateSourceTrigger设置为CellEndingEdit.我原以为这就是负责调用转换器并更新绑定值的时候.无论通过切换.NET4改变了什么控件.
这是您在上面看到的列的数据模板:
<!-- Styles used when editable cells are being edited. -->
<xcdg:CellEditor x:Key="PercentageEditor">
<xcdg:CellEditor.EditTemplate>
<DataTemplate>
<xcdg:AutoSelectTextBox Style="{StaticResource …Run Code Online (Sandbox Code Playgroud) 我最近开始使用Extended WPF Toolkit中的DataGridControl
<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource SampleDataSource}}">
<xcdg:DataGridControl ItemsSource="{Binding Orders}" SelectionMode="Single" >
<xcdg:DataGridControl.View>
<xcdg:TableflowView FixedColumnCount="1" UseDefaultHeadersFooters="True" ShowRowSelectorPane="False" VerticalGridLineBrush="Green" VerticalGridLineThickness="2" HorizontalGridLineBrush="Purple" HorizontalGridLineThickness="2">
<xcdg:TableflowView.Theme>
<xcdg:ZuneNormalColorTheme/>
</xcdg:TableflowView.Theme>
</xcdg:TableflowView>
</xcdg:DataGridControl.View>
<xcdg:DataGridControl.Columns>
<xcdg:Column FieldName="OrderID" IsMainColumn="True"/>
<xcdg:Column FieldName="ExternalID" />
<xcdg:Column FieldName="CustomerName" />
<xcdg:Column FieldName="Date" />
<xcdg:Column FieldName="Address" />
<xcdg:Column FieldName="Items" Width="*" />
</xcdg:DataGridControl.Columns>
</xcdg:DataGridControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)
没关系,一切正常.然后我添加了风格.
<Style TargetType="{x:Type xcdg:DataGridControl}">
<Setter Property="Background" Value="MediumOrchid"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
Style应用,一切都恢复正常.所以我接下来要做的就是CotrolTemplate使用Expression Blend 创建并将该模板添加到我的Style中.
<Style TargetType="{x:Type xcdg:DataGridControl}">
<Setter Property="Background"
Value="MediumOrchid" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type xcdg:DataGridControl}">
<Grid>
<Border BorderBrush="{TemplateBinding …Run Code Online (Sandbox Code Playgroud) 我正在使用Xceed datagrid的Codeplex版本.
但是在显示网格时,"Powered by Xceed"文本位于datagrid的右上角.

可以删除吗?怎么样?
我已经编写了一个转换器类(实现IValueConverter),该类将数据库(例如“ CTY”)中的代码转换为更加用户友好的描述(例如“ City”)。我想在XCeed WPF Datagridcontrol中的单个列上使用转换器,但是我不知道必须将Converter设置为哪个属性。我也尝试使用一种样式将其附加到DataCell上,但是它不能正常工作,并且我认为也是没有必要的,因为转换器应仅应用于一列,而不是应用于每个单元格。
这些列也是自动生成的,因此,如果我可以在运行时应用它们,那将非常棒!
我不知道我必须将该转换器应用到该列的哪个属性(Xceed列没有“ Binding”属性。你们有什么建议吗?
如果需要,可以提供更多示例或代码。希望我的问题对您有所帮助。
编辑:
这是我在XAML文件中使用的东西:
<utils:BudgettaireEntiteitConverter x:Key="BudgettaireEntiteitConverter" />
<xcdg:DataGridCollectionViewSource x:Key="GridViewSourceDefault"
Source="{Binding Converter={StaticResource BudgettaireEntiteitConverter}}">
<xcdg:DataGridCollectionViewSource.DetailDescriptions>
<lc:ActieOverzichtBudgettenDescription
RelationName="Budgetten"
AutoCreateDetailDescriptions="False"
AutoCreateForeignKeyDescriptions="False"
AutoCreateItemProperties="True"
Title="Budgetten" >
<lc:ActieOverzichtBudgettenDescription.StatFunctions>
<xcdg:SumFunction ResultPropertyName="SumOfBedragInBudget"
SourcePropertyName="BedragInBudget" />
<xcdg:SumFunction ResultPropertyName="SumOfBedragInAfwachting"
SourcePropertyName="BedragInAfwachting" />
</lc:ActieOverzichtBudgettenDescription.StatFunctions>
<lc:ActieOverzichtBudgettenDescription.DetailDescriptions>
<lc:ActieBudgetRegistratieSleutelsDescription RelationName="RegistratieSleutels"
AutoCreateDetailDescriptions="False"
AutoCreateForeignKeyDescriptions="False"
AutoCreateItemProperties="True"
Title="Registratiesleutels" />
</lc:ActieOverzichtBudgettenDescription.DetailDescriptions>
</lc:ActieOverzichtBudgettenDescription>
</xcdg:DataGridCollectionViewSource.DetailDescriptions>
</xcdg:DataGridCollectionViewSource>
<xcdg:DataGridControl x:Name="lsvActies"
TargetUpdated="OnListTargetUpdated"
ItemsSourceName="Acties"
IsRefreshCommandEnabled="False"
rf:XceedGridService.LoadUserSettings="True"
rf:XceedGridService.SettingsKeyName="ActieOverzichtGridKey"
rf:XceedGridService.ItemContextMenu="{StaticResource ActieContextMenu}">
<xcdg:DataGridControl.CommandBindings>
<CommandBinding Command="Delete" Executed="ExecuteDeleteItem" CanExecute="CanExecuteDeleteItem"/>
</xcdg:DataGridControl.CommandBindings>
</xcdg:DataGridControl>
Run Code Online (Sandbox Code Playgroud)
这是我的转换器:
Public Class BudgettaireEntiteitConverter
Implements IValueConverter
Private hs As Hashtable = FillHashTable()
Public Function Convert(value …Run Code Online (Sandbox Code Playgroud)