如何验证绑定到适配器的数据网格上的条目

时间:2010-06-12 22:01:27

标签: c# wpf xaml datagrid dataset

我已经使用C#一段时间了,现在开始学习WPF程序 - 这意味着我几乎什么都不知道。

我使用this教程作为指导来做我想做的事情(将数据库绑定到数据网格),经过艰苦的努力将适配器添加为数据网格的源代码后我想要启用某些单元格的验证编辑。

我的问题是数据直接从适配器发送而不是通过对象集合(我很难到达这种情况,请参阅教程的前半部分,了解如何通过资源绑定适配器和数据集)但如果​​数据仅通过集合通过集合发送,教程没有显示验证数据网格的方法。

要说清楚 - 如何验证通过资源绑定到适配器的数据网格中的输入?

相关代码:(XAML)

<Window.Resources>
    <ObjectDataProvider x:Key="DiscsDataProvider" ObjectType="{x:Type local:DiscsDataProvider}" />
    <ObjectDataProvider x:Key="Discs" ObjectInstance="{StaticResource ResourceKey=DiscsDataProvider}" MethodName="GetDiscs" />

    <Style x:Key="CellEditStyle" TargetType="{x:Type TextBox}">
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="Padding" Value="0"/>
        <Setter Property="Background" Value="Yellow"/>
        <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>
</Window.Resources>

对于datagrid:

<Grid Width="auto" Height="auto">
    <DockPanel DataContext="{Binding Source={StaticResource ResourceKey=Discs}}">
        <DataGrid Margin="12,0,0,12" Name="View_dg" HorizontalAlignment="Left" Width="533" Height="262" VerticalAlignment="Bottom" ItemsSource="{Binding}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeColumns="True">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Path=ContainerID}" CanUserReorder="False" CanUserResize="True" CanUserSort="True"  EditingElementStyle="{StaticResource CellEditStyle}" IsReadOnly="False" Header="Container" />
                <DataGridTextColumn Binding="{Binding Path=ID}"          CanUserReorder="False" CanUserResize="True" CanUserSort="True"  EditingElementStyle="{StaticResource CellEditStyle}" IsReadOnly="True"  Header="ID" />
                <DataGridTextColumn Binding="{Binding Path=Title}"       CanUserReorder="False" CanUserResize="True" CanUserSort="True"  EditingElementStyle="{StaticResource CellEditStyle}" IsReadOnly="False" Header="Title" />
                <DataGridTextColumn Binding="{Binding Path=SubTitle}"    CanUserReorder="False" CanUserResize="True" CanUserSort="False" EditingElementStyle="{StaticResource CellEditStyle}" IsReadOnly="False" Header="Sub Title" />
                <DataGridTextColumn Binding="{Binding Path=Type}"        CanUserReorder="False" CanUserResize="True" CanUserSort="True"  EditingElementStyle="{StaticResource CellEditStyle}" IsReadOnly="False" Header="Type" />
                <DataGridTextColumn Binding="{Binding Path=Volume}"      CanUserReorder="False" CanUserResize="True" CanUserSort="False" EditingElementStyle="{StaticResource CellEditStyle}" IsReadOnly="False" Header="Volume" />
                <DataGridTextColumn Binding="{Binding Path=TotalDiscs}"  CanUserReorder="False" CanUserResize="True" CanUserSort="False" EditingElementStyle="{StaticResource CellEditStyle}" IsReadOnly="False" Header="Total Discs" />
            </DataGrid.Columns>
        </DataGrid>
    </DockPanel>

和C#:

public class DiscsDataProvider
{
    private DiscsTableAdapter adapter;

    private DB dataset;

    public DiscsDataProvider()
    {
        dataset = new DB();
        adapter = new DiscsTableAdapter();
        adapter.Fill(dataset.Discs);
    }

    public DataView GetDiscs()
    {
        return dataset.Discs.DefaultView;
    }
}

0 个答案:

没有答案