DataSet Relations - These columns don't currently have unique values   otázka

VB.NET, WPF, Databáze

Zdravím,

řeším malý problém. Mám ve WPF aplikaci DataGrid do kterého pomocí ItemsSource přiřadím ds.Tables("Klienti").DefaultView

Tabulka se zobrazí. Dále mám stavený RowDetailsTemplate, kde mám další DataGrid do kterého přiřazuji seznam smluv pomocí relace:

Dim Relace1 As New DataRelation("Smlouvy", ds.Tables("Klienti").Columns("id"), ds.Tables("PS").Columns("idklient"))

Doteď vše OK. Po kliknutí na řádek v prvním DataGridu se mi zobrazí detail s druhým DataGridem a příslušnými smlouvami, ale problém nastavá v tom že v druhé tabulce (tedy PS) mám sloupec 'ps' ve kterém mám uložený integer s id číslem typu smlouvy.

Nakonec mám třetí tabulku 'Ciselniky' kde mám uložený ID čísla a Názvy smluv.

A já bych potřeboval udělat další relaci na propojení právě tabulky PS sloupec ps s tabulkou Ciselniky sloupcem id. Zkusil jsem toto:

Dim Relace2 As New DataRelation("tPS", ds.Tables("Ciselniky").Columns("id"), ds.Tables("PS").Columns("ps"))

ale dostanu chybu: These columns don't currently have unique values

Ještě jsem zkusil prohodit v druhé relaci ty sloupky. Chybu to nehodí, ale pak nevím jak zobrazit příslušný název smlouvy v detailu.

Druhý DataGrid mám takto:

                <DataGrid x:Name="pGrid" ItemsSource="{Binding Smlouvy}" Background="White" GridLinesVisibility="Horizontal" HorizontalGridLinesBrush="#FFCBCBCB" AutoGenerateColumns="False" CanUserReorderColumns="False" CanUserAddRows="False" CanUserResizeRows="False" CanUserDeleteRows="False" IsReadOnly="True" Margin="5">
                    <DataGrid.Columns>
                        <DataGridTextColumn Binding="{Binding id}" Header="ID" CanUserSort="False" Visibility="Hidden"/>
                        <DataGridTextColumn Binding="{Binding datum, StringFormat=d, ConverterCulture='cs-CZ'}" Header="Datum" MinWidth="70" SortDirection="Descending">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center"/>
                                    <Setter Property="Padding" Value="5,0"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.ElementStyle>
                                <Style TargetType="TextBlock">
                                    <Setter Property="HorizontalAlignment" Value="Center"/>
                                    <Setter Property="Padding" Value="5,0"/>
                                </Style>
                            </DataGridTextColumn.ElementStyle>
                        </DataGridTextColumn >
                        <DataGridTextColumn Binding="{Binding platnost, StringFormat=d, ConverterCulture='cs-CZ'}" Header="Platnost" MinWidth="70">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center"/>
                                    <Setter Property="Padding" Value="5,0"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.ElementStyle>
                                <Style TargetType="TextBlock">
                                    <Setter Property="HorizontalAlignment" Value="Center"/>
                                    <Setter Property="Padding" Value="5,0"/>
                                </Style>
                            </DataGridTextColumn.ElementStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding cps}" Header="Číslo PS" MinWidth="100">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center"/>
                                    <Setter Property="Padding" Value="5,0"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.ElementStyle>
                                <Style TargetType="TextBlock">
                                    <Setter Property="Padding" Value="5,0"/>
                                    <Setter Property="HorizontalAlignment" Value="Center"/>
                                </Style>
                            </DataGridTextColumn.ElementStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding ps}" Header="Typ PS" MinWidth="100">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="Center"/>
                                    <Setter Property="Padding" Value="5,0"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.ElementStyle>
                                <Style TargetType="TextBlock">
                                    <Setter Property="Padding" Value="5,0"/>
                                    <Setter Property="HorizontalAlignment" Value="Center"/>
                                </Style>
                            </DataGridTextColumn.ElementStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding kmen, StringFormat=C, ConverterCulture='cs-CZ'}" Header="Kmen" MinWidth="90">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="right"/>
                                    <Setter Property="Padding" Value="5,0"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.ElementStyle>
                                <Style TargetType="TextBlock">
                                    <Setter Property="HorizontalAlignment" Value="Right"/>
                                    <Setter Property="Padding" Value="5,0"/>
                                </Style>
                            </DataGridTextColumn.ElementStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding provize, StringFormat=C, ConverterCulture='cs-CZ'}" Header="Provize" MinWidth="90">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="HorizontalContentAlignment" Value="right"/>
                                    <Setter Property="Padding" Value="5,0"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.ElementStyle>
                                <Style TargetType="TextBlock">
                                    <Setter Property="HorizontalAlignment" Value="Right"/>
                                    <Setter Property="Padding" Value="5,0"/>
                                </Style>
                            </DataGridTextColumn.ElementStyle>
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding poznamka}" Header="Poznámka">
                            <DataGridTextColumn.HeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="Padding" Value="5,0"/>
                                </Style>
                            </DataGridTextColumn.HeaderStyle>
                            <DataGridTextColumn.ElementStyle>
                                <Style TargetType="TextBlock">
                                    <Setter Property="Padding" Value="5,0"/>
                                </Style>
                            </DataGridTextColumn.ElementStyle>
                        </DataGridTextColumn>
                    </DataGrid.Columns>
                </DataGrid>

Teď je otázka jak správně přiřadit název smlouvy do sloupce Typ PS.

Předem moc děkuji za nakopnutí....

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdar, DataRelation slouží vlastně ke dvěma věcem, které jsou na jednu stranu odlišné, na tu druhou spolu dost souisejí:

- reflektují vztah typu cizí klíč mezi dvěma tabulkami. To se pravděpodobně děje ve tvém případě. Cizí klíč se může odkazovat pouze na kandidátní klíč, což vypadá OK.

- Druhá varianta je reflektovat libovolnou závislost (vlastně cizí klíč na neunikátní sloupec). Možná, že ti pomůže předhodit kosntruktoru DataRelation další argument: false (viz http://msdn.microsoft.com/en-us/library/..., budeš tedy mít

Dim Relace2 As New DataRelation("tPS", ds.Tables("Ciselniky").Columns("id"), ds.Tables("PS").Columns("ps"), false)

Nezaručuju ale, že ti to takto bude fungovat správně, rád bych viděl schéma tabulek s kardinalitami vazeb mezi nimi.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ahoj,

struktura tabulek je následující

CREATE TABLE [PS] (
  [id] bigint NOT NULL  IDENTITY (1,1)
, [iddb] int NOT NULL
, [idklient] bigint NOT NULL
, [datum] datetime NOT NULL
, [platnost] datetime NOT NULL
, [cps] bigint NOT NULL
, [ps] int NOT NULL
, [kmen] int NULL
, [provize] int NULL
, [zaplaceno] bit NULL
, [poznamka] nvarchar(4000) NULL
);

CREATE TABLE [Ciselniky] (
  [id] int NOT NULL  IDENTITY (1,1)
, [typ] nvarchar(50) NOT NULL
, [nazev] nvarchar(50) NOT NULL
, [arg1] int NULL
, [arg2] int NULL
, [text] nvarchar(255) NULL
);
nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback