我将首先说我是WPF的新手。但是,我确实有20年的开发经验和大约5年的C#webform经验。
我正在尝试诊断使用DataGrid控件的WPF应用程序。
我将尝试描述此应用程序中发生的情况..
以下是产生“错误”的步骤。我想弄清楚发生了什么:
用户向DataGrid表添加一行。 用户将第一列(Qty)更改为1。 用户在列中进行选项卡。 一旦光标通过“Discount Pct”列并进入下一列。 在这个momemt,“折扣Pct”单元格以红色标出。 在“折扣Pct”列被“修复”之前,不能编辑其他单元格。 有趣的是,你可以清除单元格并输入相同的数据,红色就会消失。
我想也许这是因为该字段是一个“百分比”字段(当你键入.10时,当你离开单元格时它会变成“10%”),但同样的事情发生在另一个(纯文本/ varchar) )专栏。
我注意到的其他奇怪的事情:
如果用户没有在数量单元格中输入任何内容,只是直接标记所有列,最后,没有任何单元格变为红色。
如果用户在Discount Pct单元格上单击(而不是Tab键)(无论是否输入数量),则离开该单元格(单击或选项卡),单元格不会变为红色。
这里有什么想法吗?我想有一些类型的细胞验证失败,但为什么只有在这些特定情况下呢?
你会如何诊断?我可以以某种方式显示验证错误(我确信必须有一个我可以配合的处理程序),也许这会告诉我一些事情。
思考?想法?
为每个请求添加代码:
<DataGrid x:Name="myDataGrid"
ItemsSource="{Binding}"
CanUserAddRows="False"
CanUserDeleteRows="True"
CanUserResizeRows="False"
SelectionUnit="CellOrRowHeader"
ColumnHeaderStyle="{StaticResource lclDataGridColumnHeaders}"
RowHeaderStyle="{StaticResource lclDataGridRowHeaders}"
CellStyle="{StaticResource lclDataGridCellStyle}"
HorizontalGridLinesBrush="LightBlue"
VerticalGridLinesBrush="LightBlue"
AutoGeneratingColumn="DataGrid_AutoGeneratingColumn"
Loaded="DataGrid_Loaded"
LoadingRow="DataGrid_LoadingRow"
CurrentCellChanged="DataGrid_CurrentCellChanged"
CellEditEnding="DataGrid_CellEditEnding">
</DataGrid>
我想出了如何将Style应用于“EditCell”并使用以下内容(来自其他网站):
<Style x:Key="lclDataGridCellEditStyle" TargetType="{x:Type TextBox}">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="0"/>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
然后,我将它分配给datagrid上的EditingElementStyle(在后面的代码中)。
生成的验证错误(确认我的怀疑)是:“值'10%'无法转换”。
这是有道理的,因为它希望用户输入“.10”或somethinig类似(浮点数/双/小数/等)...没有“%”(将条目视为字符/文本)。
问题是,此行已“导入”(从另一个表复制)到DataGrid中,因此该字段已填充。那么,我怎样才能让DataGrid只接受“编辑值”的“显示值”(抛出术语并猜测)?
并且,为什么只有当您更改数量单元格然后选中它时,是否会发生此验证错误?
更多关于其他领域的内容......一旦我“解决”了这个问题,我怀疑解决方案会类似......
我可以提供更多代码,但还有很多。我试图给出必要的东西。如果我可以发布其他代码(例如AutoGeneratingColumn,这是非常基本的),请告诉我!
新信息......我猜测更改数量后红框显示的原因是因为触发行更改,进行验证。而且,为了修复上面描述的百分比场景,看起来我需要实现如下所述的“转换器”:http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx
另一次更新......
这很有用。我将转换器添加到百分比字段,现在一切都很适合那个。
给我带来问题的另一个字段是一个允许空值的“整数”列。导入记录时,该列为空,但显然DataGridTextColumn要求int不为null。有没有我可以设置允许空值的属性?或者,我只需要做另一个转换器来转换..um ... null(string)和int ??洛尔
谢恩
答案 0 :(得分:1)
您可能有一个int类型的列?这将允许空值。