Как проверить запись в сетке данных, которая связана с адаптером - PullRequest
1 голос
/ 13 июня 2010

Я уже некоторое время использую C # и начал программу для изучения WPF, что означает, что я почти ничего о нем не знаю.

Я использовал этот учебник в качестве руководства ксделать то, что я хотел сделать (связывание базы данных с сеткой данных), после тяжелой борьбы за добавление адаптера в качестве источника сетки данных, я теперь хочу включить редактирование с проверкой на некоторых ячейках.

Моя проблема в том, что данные отправляются прямо из адаптера, а не через коллекцию объектов (мне было трудно добраться до этой ситуации, см. Первую половину учебника о том, как связать адаптер и набор данных через ресурсы), нов учебнике не показан способ проверки сетки данных, если данные отправляются только через адаптер через коллекцию.

Чтобы было понятно, как проверить входные данные в сетке данных, которая связана садаптер через ресурс?

Соответствующий код: (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>

Для сетки данных:

<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;
    }
}
...