Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Ghst
Člen
Avatar
Ghst:5.10.2018 13:44

Ahoj,

potýkám se s takovým pro někoho asi banálním problémem, ale nedokázal jsem ho vyřešit.

Ve WPF píši aplikaci s pomocí EF na evidenci dat.

Pro zjednodušení mám 2 tabulky - Auta a Modely, Auto má Id, spz a FK_modelId. Modely mají Id a název.

Data zobrazuji v datagridu, ve sloupečku FK_ModelId bych rád zobrazil název modelu namísto ID.

Našel jsem řešení, které zobrazuje správně, ale problém je ten, ale je to asi špatně, nějakým způsobem se propojí zdroje dat.

To se projeví tak, že pokud vyberu v autech z comba položku, označí se příslušná v tabulce modelů. Pokud přidám nový model, v tabulce aut, bude aktuálně označenému záznamu změněna vazba ze stávajícího modelu na nově přidaný.

1 Obrázek psuštění aplikace - 1. řádek auta má model caroq
2 Obrázek - dojde k přidání nového modelu test, po uložení je tento nově přidaný model přiřazen k autu, kde byl nastaven caroq, toto je nechtěná funkce

obrazky

Předpokládám, že chyba je v combu,

<ComboBox Grid.Column="1" HorizontalAlignment="Left" Height="Auto" Margin="3" Grid.Row="1" VerticalAlignment="Center" Width="120"
                            x:Name="fK_ModelIdComboBox"
                            IsEditable="True"
                            IsTextSearchEnabled="True"
                            IsTextSearchCaseSensitive="False"
                            TextSearch.TextPath="Název"
                            ItemsSource="{Binding Source={StaticResource modelViewSource}}"
                            SelectedValuePath="Id"
                            SelectedValue="{Binding Path=FK_ModelId}"
                            IsSynchronizedWithCurrentItem="True"
                            IsReadOnly="False">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock>
                            <Run Text="{Binding Název}" />
                        </TextBlock>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>

Celý kód:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Test"
        mc:Ignorable="d"
        Title="MainWindow" Height="640" Width="840" Loaded="Window_Loaded">
    <Window.Resources>
        <CollectionViewSource x:Key="autaViewSource" d:DesignSource="{d:DesignInstance {x:Type local:Auta}, CreateList=True}"/>
        <CollectionViewSource x:Key="modelViewSource" d:DesignSource="{d:DesignInstance {x:Type local:Model}, CreateList=True}"/>
    </Window.Resources>
    <Grid DataContext="{StaticResource autaViewSource}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <DataGrid x:Name="autaDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" Margin="0,20,16,389" Grid.RowSpan="3" RowDetailsVisibilityMode="VisibleWhenSelected" CanUserAddRows="False">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="idColumn" Binding="{Binding Id}" Header="Id" Width="20"/>
                <DataGridTextColumn x:Name="spzColumn" Binding="{Binding Spz}" Header="Spz" Width="80"/>
                <DataGridTemplateColumn x:Name="datumRegistraceColumn" Header="Datum Registrace" Width="140">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <DatePicker SelectedDate="{Binding DatumRegistrace, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <!--<DataGridTextColumn x:Name="fK_ModelIdColumn" Binding="{Binding FK_ModelId}" Header="FK Model Id" Width="150"/>-->
                <DataGridTemplateColumn x:Name="fK_ModelIdColumn" Header="Model" Width="140">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding Path=Model.Název}"/>
                            </StackPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

            </DataGrid.Columns>
        </DataGrid>
        <DataGrid x:Name="modelDataGrid" AutoGenerateColumns="False" Grid.Column="1" EnableRowVirtualization="True" ItemsSource="{Binding Source={StaticResource modelViewSource}}" Margin="6,25,10,384" Grid.RowSpan="3" RowDetailsVisibilityMode="VisibleWhenSelected" CanUserAddRows="False">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="idColumn1" Binding="{Binding Id}" Header="Id" Width="SizeToHeader"/>
                <DataGridTextColumn x:Name="názevColumn" Binding="{Binding Název}" Header="Název" Width="250"/>
            </DataGrid.Columns>
        </DataGrid>
        <Button x:Name="saveBtn" Content="Save" HorizontalAlignment="Left" Margin="323,388,0,0" Grid.Row="2" VerticalAlignment="Top" Width="148" Click="saveBtn_Click" Height="43" Grid.ColumnSpan="2"/>
        <Grid x:Name="grid1" HorizontalAlignment="Left" Margin="28,237,0,0" Grid.Row="2" VerticalAlignment="Top">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Label Content="Datum Registrace:" Grid.Column="0" HorizontalAlignment="Left" Margin="3" Grid.Row="0" VerticalAlignment="Center"/>
            <DatePicker x:Name="datumRegistraceDatePicker" Grid.Column="1" HorizontalAlignment="Left" Margin="3" Grid.Row="0" SelectedDate="{Binding DatumRegistrace, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center"/>
            <Label Content="FK Model Id:" Grid.Column="0" HorizontalAlignment="Left" Margin="3" Grid.Row="1" VerticalAlignment="Center"/>
            <!--<TextBox x:Name="fK_ModelIdTextBox" Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="3" Grid.Row="1" Text="{Binding FK_ModelId, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120"/>-->
            <ComboBox Grid.Column="1" HorizontalAlignment="Left" Height="Auto" Margin="3" Grid.Row="1" VerticalAlignment="Center" Width="120"
                            x:Name="fK_ModelIdComboBox"
                            IsEditable="True"
                            IsTextSearchEnabled="True"
                            IsTextSearchCaseSensitive="False"
                            TextSearch.TextPath="Název"
                            ItemsSource="{Binding Source={StaticResource modelViewSource}}"
                            SelectedValuePath="Id"
                            SelectedValue="{Binding Path=FK_ModelId}"
                            IsSynchronizedWithCurrentItem="True"
                            IsReadOnly="False">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock>
                            <Run Text="{Binding Název}" />
                        </TextBlock>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>

            <Label Content="Id:" Grid.Column="0" HorizontalAlignment="Left" Margin="3" Grid.Row="2" VerticalAlignment="Center"/>
            <TextBox x:Name="idTextBox" Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="3" Grid.Row="2" Text="{Binding Id, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120"/>
            <Label Content="Spz:" Grid.Column="0" HorizontalAlignment="Left" Margin="3" Grid.Row="3" VerticalAlignment="Center"/>
            <TextBox x:Name="spzTextBox" Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="3" Grid.Row="3" Text="{Binding Spz, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120"/>
        </Grid>
        <Grid x:Name="grid2" Grid.Column="1" DataContext="{StaticResource modelViewSource}" HorizontalAlignment="Left" Margin="51,240,0,0" Grid.Row="2" VerticalAlignment="Top">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Label Content="Id:" Grid.Column="0" HorizontalAlignment="Left" Margin="3" Grid.Row="0" VerticalAlignment="Center"/>
            <TextBox x:Name="idTextBox1" Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="3" Grid.Row="0" Text="{Binding Id, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120"/>
            <Label Content="Název:" Grid.Column="0" HorizontalAlignment="Left" Margin="3" Grid.Row="1" VerticalAlignment="Center"/>
            <TextBox x:Name="názevTextBox" Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="3" Grid.Row="1" Text="{Binding Název, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120"/>
        </Grid>
        <Button x:Name="addCarBtn" Content="+ nové auto" HorizontalAlignment="Left" Margin="91,388,0,0" Grid.Row="2" VerticalAlignment="Top" Width="75" Click="button_Click"/>
        <Button x:Name="addModelBtn" Content="+ nový model" Grid.Column="1" HorizontalAlignment="Left" Margin="99,344,0,0" Grid.Row="2" VerticalAlignment="Top" Width="75" Click="addModelBtn_Click"/>
    </Grid>
</Window>

Zkusil jsem:

Chci docílit: Chci docílit, aby sem modl evidovat modely i automobili a jediné propojení bylo to, že u auta vyberu model z comba a ten přiřadím.

 
Odpovědět
5.10.2018 13:44
Avatar
Ghst
Člen
Avatar
Ghst:5.10.2018 22:12

Tak sem snad našel řešení...

IsSynchronizedWithCurrentItem="False"
Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
5.10.2018 22:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.