红色概述的WPF DataGrid单元格? (Noobie)

时间:2011-03-03 20:19:43

标签: wpf datagrid wpfdatagrid

我将首先说我是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 ??洛尔

谢恩

1 个答案:

答案 0 :(得分:1)

您可能有一个int类型的列?这将允许空值。