Я уже некоторое время использую 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;
}
}