Использование DataContext из Entity Framework для создания Grid с детализацией - PullRequest
0 голосов
/ 19 сентября 2019

Я использую Entity Framework 6.0 (сначала код).У меня есть 2 таблицы, которые соединены с ключами.Контекст данных правильно отображает 2 таблицы из DBSets.В настоящее время у меня есть их отображение в виде мастер - детали с 2 отдельными сетками.Когда я нажимаю на основную сетку, соответствующие подробные данные отображаются в нижней сетке.Теперь я хотел бы изменить способ отображения и отображения данных в сетке с детализацией.

Я изменил источник коллекций, но все еще не могу заставить его работать.

<Window.Resources>
      <CollectionViewSource x:Key="catViewSource" d:DesignSource="d:DesignInstance {x:Type local:Cat},CreatList=True}"/>
      <CollectionViewSource x:Key="catProdViewSource" Source="{Binding Prod, Source={StaticResource catViewSource}}"/>       
  </Window.Resources>

  <Grid DataContext="{StaticResource catViewSource}" Margin="0,0,0,0">
      <Grid.RowDefinitions>
          <RowDefinition Height="Auto" MinHeight="0" />
          <RowDefinition Height="150"/>
          <RowDefinition Height="220"/>
          <RowDefinition Height="220"/>
          <RowDefinition Height="50"/>
          <RowDefinition Height="30"/>
          <RowDefinition Height="200"/>
      </Grid.RowDefinitions>


      <Grid Grid.Row="0" >

      </Grid>

       <igDP:XamDataGrid x:Name="catDataGrid" Grid.Row="2" DataSource="{Binding}" RecordActivated="catDataGrid_RecordActivated">
          <igDP:XamDataGrid.FieldSettings>
              <igDP:FieldSettings Width="Auto" CellHeight="8"  AllowRecordFiltering="True" AllowEdit="False"/>
          </igDP:XamDataGrid.FieldSettings>

          <igDP:XamDataGrid.FieldLayoutSettings>
              <igDP:FieldLayoutSettings AutoGenerateFields="False" SelectionTypeRecord="Extended" SelectionTypeCell="None" HighlightAlternateRecords="True"/>
          </igDP:XamDataGrid.FieldLayoutSettings>

          <igDP:XamDataGrid.FieldLayouts>
              <igDP:FieldLayout>

                  <igDP:Field Name="ID" Width="Auto" >
                      <igDP:Field.Settings>
                          <igDP:FieldSettings  AllowEdit="False" CellClickAction="SelectRecord"/>
                      </igDP:Field.Settings>
                  </igDP:Field>
                  <igDP:Field Name="Name" Width="Auto"  >
                      <igDP:Field.Settings>
                          <igDP:FieldSettings AllowEdit="False" CellClickAction="SelectRecord"/>
                      </igDP:Field.Settings>
                  </igDP:Field>

              </igDP:FieldLayout>
          </igDP:XamDataGrid.FieldLayouts>

      </igDP:XamDataGrid>

      <igDP:XamDataGrid x:Name="prodDataGrid" Grid.Row="3" DataSource="{Binding Source={StaticResource catProdViewSource}}" >

          <igDP:XamDataGrid.FieldSettings>
              <igDP:FieldSettings Width="Auto" CellHeight="8"/>
          </igDP:XamDataGrid.FieldSettings>

          <igDP:XamDataGrid.FieldLayoutSettings>
              <igDP:FieldLayoutSettings AutoGenerateFields="False" SelectionTypeRecord="Extended" SelectionTypeCell="None" HighlightAlternateRecords="False"/>
          </igDP:XamDataGrid.FieldLayoutSettings>

          <igDP:XamDataGrid.FieldLayouts>
              <igDP:FieldLayout>
                  <igDP:Field Name="ID" Width="Auto" >
                      <igDP:Field.Settings>
                          <igDP:FieldSettings AllowEdit="False"  />
                      </igDP:Field.Settings>
                  </igDP:Field>

                  <igDP:UnboundField Name="ABC" Width="Auto" Binding="{Binding ABC}" >
                      <igDP:UnboundField.Settings>
                          <igDP:FieldSettings AllowEdit="True" />
                      </igDP:UnboundField.Settings>
                  </igDP:UnboundField>


              </igDP:FieldLayout>
          </igDP:XamDataGrid.FieldLayouts>

      </igDP:XamDataGrid>
   </Grid>
</Window>

// Вот код недавно запрошенного

namespace MyCode.View
{
    public partial class MyCodeView : Window
    {

        MyCodeViewModel viewModel;

        public ProductContext _context = new ProductContext();


        public MyCodeView()
        {
            viewModel = new MyCodeViewModel();
            InitializeComponent();
            DataContext = viewModel;
        }


        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

            try
            {
                //some task
            }

            catch (Exception ex)
            {

            }

            System.Windows.Data.CollectionViewSource catViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("catViewSource")));


            _context.Categories.Where(x => x.CategoryName.Contains("P")).Load();


            catViewSource.Source = _context.Categories.Local;


        }
    }
}

// ProductContext.cs

namespace MyCode
{
    using System.Data.Entity;

    public partial class ProductContext : DbContext
    {
        public ProductContext(): base("name=ProductContext")
        {
            Database.SetInitializer<ProductContext>(null);
        }

        public virtual DbSet<Category> Categories { get; set; }
        public virtual DbSet<Product> Products { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Product>()
                .Property(e => e.UnitPrice)
                .HasPrecision(19, 4);
        }
    }
}

1 Ответ

0 голосов
/ 19 сентября 2019

Группировка (детализация)

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

https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/how-to-group-sort-and-filter-data-in-the-datagrid-control

В частности, вам необходимо использовать следующее в вашем XAML:

<DataGrid.GroupStyle>
    <!-- Style for groups at top level. -->
    <GroupStyle>
        <GroupStyle.ContainerStyle>
            <Style TargetType="{x:Type GroupItem}">
                <Setter Property="Margin" Value="0,0,0,5" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type GroupItem}">
                            <Expander IsExpanded="True" Background="#FF112255" BorderBrush="#FF002255"
                                      Foreground="#FFEEEEEE" BorderThickness="1,1,1,5">
                                <Expander.Header>
                                    <DockPanel>
                                        <TextBlock FontWeight="Bold" Text="{Binding Path=Name}"
                                                   Margin="5,0,0,0" Width="100" />
                                        <TextBlock FontWeight="Bold" Text="{Binding Path=ItemCount}" />
                                    </DockPanel>
                                </Expander.Header>
                                <Expander.Content>
                                    <ItemsPresenter />
                                </Expander.Content>
                            </Expander>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </GroupStyle.ContainerStyle>
    </GroupStyle>
    <!-- Style for groups under the top level. -->
    <GroupStyle>
        <GroupStyle.HeaderTemplate>
            <DataTemplate>
                <DockPanel Background="LightBlue">
                    <TextBlock Text="{Binding Path=Name, Converter={StaticResource completeConverter}}"
                               Foreground="Blue" Margin="30,0,0,0" Width="100" />
                    <TextBlock Text="{Binding Path=ItemCount}" Foreground="Blue" />
                </DockPanel>
            </DataTemplate>
        </GroupStyle.HeaderTemplate>
    </GroupStyle>
</DataGrid.GroupStyle>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...