MongoDB数组值未出现在WPF-XAML datagrid中-解决方案

时间:2019-10-28 11:19:24

标签: c# wpf mongodb datagrid

我试图从MongoDB数据库查询数据(重新排序),以便在我的datagrid中显示它们。正常值(键值对)完美显示,但数组值没有,而且我不明白自己缺少什么。 我将在下面发布我的相关代码,希望有人可以告诉我我所缺少的内容,以便显示数据网格中 Bestellung 中的数组值。在此先感谢您的帮助,非常感谢!

代码如下:

主要型号的重新订购

public class reorders
{
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; private set; }
    [BsonElement("Hv")]
    public string Hv { get; set; }
    [BsonElement("Bv")]
    public string Bv { get; set; }
    [BsonElement("Bauleiter")]
    public string Bauleiter { get; set; }
    [BsonElement("Empfaenger")]
    public string Empfaenger { get; set; }
    [BsonElement("Empfaenger_Ansprechpartner")]
    public string Empf_Ansprechpartner { get; set; }
    [BsonElement("Empfaenger_Mail")]
    public string Empf_Mail { get; set; }
    [BsonElement("Anlieferungsort")]
    public string Anlieferungsort { get; set; }
    [BsonElement("Anschrift")]
    public string Adressat { get; set; }
    [BsonElement("Adressat")]
    public string Anschrift { get; set; }
    [BsonElement("Plz_Ort")]
    public string Plz_Ort { get; set; }       
    [BsonElement("Kontaktperson_Kontaktnr")]
    public string Kontaktperson_Kontaktnr { get; set; }     
    public string Liefertermin { get; set; }
    [BsonElement("Bearbeiter")]
    public string Bearbeiter { get; set; }
    [BsonElement("Telefon_Bearbeiter")]
    public string Telefon_Bearbeiter { get; set; }
    [BsonElement("Mail_Bearbeiter")]
    public string Mail_Bearbeiter { get; set; }
    [BsonElement("Bestelldatum")]
    public string Bestelldatum { get; set; }
    [BsonElement("Projektleiter")]
    public string Projektleiter { get; set; }
    [BsonElement("Bemerkung_oben")]
    public string Bemerkung_oben { get; set; }
    [BsonElement("Angelegt_am")]
    public string Angelegt_am { get; set; }       
    [BsonElement("Rechnungsnr")]
    public string Rechnungsnr { get; set; }
    [BsonElement("letzteAktualisierung")]
    public string letzteAktualisierung { get; set; }

    [BsonElement("Bestellung")]
    public IList<articles> Bestellung { get; set; }

    public Nachbestellung()
    {

    }      
}

侧模型文章(1个“ reorders.Bestellung”由多个“文章”组成,即datagrid行!)

public class articles
{   
    [BsonElement("Pos")]
    public string Pos { get; set; }

    [BsonElement("Artikelbezeichnung")]
    public string Artikelbezeichnung { get; set; }

    [BsonElement("Artikelnummer")]
    public string Artikelnummer { get; set; }

    [BsonElement("Einheit")]
    public string Einheit { get; set; }

    [BsonElement("Menge")]
    public string Menge { get; set; }

    [BsonElement("Einzelpreis")]
    public string Einzelpreis { get; set; }

    [BsonElement("Gesamtpreis")]
    public string Gesamtpreis { get; set; }

    [BsonElement("Anforderungsgrund")]
    public string Anforderungsgrund { get; set; }

    [BsonElement("Anforderungsnr")]
    public string Anforderungsnr { get; set; }

    [BsonElement("Anforderer")]
    public string Anforderer { get; set; }

    [BsonElement("Bemerkungen")]
    public string Bemerkungen { get; set; }                    
}

MongoDB结构(有关其中的值,请参见datagrid(最后一张图像),为了保护隐私,我不得不删除原始的值):

All database entries are here (just imagine they are all filled. I had to remove the actual values due to privacy protection). No problem here! The Bestellung-Array (order-Array) is filled just fine like I want it.

BUT the datagrid view doesnt show the array values starting from "Pos" till "Bemerkungen". The single value-fields are all showing up, though!

代码隐藏(也是我的ViewModel atm,我知道违反MVVM ...但现在并不重要,除非导致数组未出现在数据网格中!)

public existingReorders(string hv)
    {
        InitializeComponent();
        var db = new MongoCRUD("myDB");
        //MongoDB Query
        var recs = db.LoadRecords<reorders>("myReorders", hv);
        //checking if there are any records
        if(recs.Count <= 0)
        {
            MessageBox.Show("There were no records found for this hv!", "NO REORDERS FOUND!", MessageBoxButton.OK, MessageBoxImage.Information);
        }
        else
        {
            this.Show();                
            dgVorh.ItemsSource = recs;  
            dgVorh.DataContext = recs;

        }
    }

XAML:

<Window x:Class="Nachbestellungen.existingReorders"
    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:Nachbestellungen"
    mc:Ignorable="d"
    WindowStartupLocation="CenterScreen"
    Title="Existing Reorders" WindowState="Maximized" WindowStyle="ThreeDBorderWindow">

<Window.Resources>
    <Style x:Key="cellLightGray" TargetType="{x:Type TextBlock}">
        <Setter Property="Background" Value="LightGray" />
    </Style>
</Window.Resources>
<!-- View -->
<Grid x:Name="gridVorh">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <DataGrid x:Name="dgVorh" Margin="5" Grid.Row="0"
              SelectionMode="Single" SelectionUnit="Cell" IsReadOnly="False" 
              CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="False" 
              BorderBrush="Black" BorderThickness="2" RowHeight="30" FontFamily="Arial Narrow" FontSize="18">

        <!-- Style Column Headers -->
        <DataGrid.Resources>
            <Style TargetType="{x:Type DataGridColumnHeader}">
                <Setter Property="Foreground" Value="#FFFFFF"/>
                <Setter Property="Background" Value="#DD002C"/>
                <Setter Property="FontWeight" Value="Bold"/>
                <Setter Property="BorderThickness" Value="0,0,1,2"/>
                <Setter Property="BorderBrush" Value="Black"/>
                <Setter Property="FontSize" Value="18"/>
                <Setter Property="HorizontalContentAlignment" Value="Center"/>
                <Setter Property="Height" Value="30"/>
            </Style>
        </DataGrid.Resources>

        <DataGrid.Columns>
            <DataGridTextColumn Header="Angelegt am" Binding="{Binding Angelegt_am}" IsReadOnly="True">
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="TextBlock.Background" Value="LightGray"/>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Header="Bearbeiter" Binding="{Binding Bearbeiter}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Bestelldatum" Binding="{Binding Bestelldatum}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Bestellt bei" Binding="{Binding Empfaenger}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Lieferort" Binding="{Binding Anlieferungsort}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Adressat" Binding="{Binding Adressat}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Lieferanschrift" Binding="{Binding Anschrift}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Lieferort" Binding="{Binding Plz_Ort}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Rechnungsnr" Binding="{Binding Rechnungsnr}"/>
            <DataGridTextColumn Header="ÄndDatum" Binding="{Binding letzteAktualisierung}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <!--(von wem aktualisiert?)-->
            <!-- Artikel -->

            <DataGridTextColumn Header="Pos" Binding="{Binding Path=[Bestellung].Pos}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Artikelbezeichnung" Binding="{Binding Path=[Bestellung].Artikelbezeichnung}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Artikelnummer" Binding="{Binding Bestellung}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Einheit" Binding="{Binding Bestellung}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Menge" Binding="{Binding Bestellung}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Einzelpreis" Binding="{Binding Bestellung}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Gesamtpreis" Binding="{Binding Bestellung}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Anforderungsgrund" Binding="{Binding Bestellung}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Anforderungsnr" Binding="{Binding Bestellung}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Anforderer" Binding="{Binding Bestellung}" IsReadOnly="True" ElementStyle="{StaticResource cellLightGray}"/>
            <DataGridTextColumn Header="Bemerkungen" Binding="{Binding Bestellung}"/>
        </DataGrid.Columns>
    </DataGrid>
    <StackPanel Name="stpnlUpdate" Grid.Row="1" HorizontalAlignment="Center">
        <Button Name="btnUpdate" Content="Aktualisieren" 
                Background="#DD002C" Foreground="White" 
                BorderThickness="2" BorderBrush="Black" 
                Click="BtnUpdate_Click" 
                Height="40" Width="130" 
                FontFamily="Verdana" FontStyle="Oblique" 
                FontStretch="ExtraCondensed" FontSize="15" 
                FontWeight="ExtraBlack" 
                MouseEnter="BtnUpdate_MouseEnter" MouseLeave="BtnUpdate_MouseLeave">
        </Button>
    </StackPanel>
</Grid>

这就是我想要的样子: enter image description here

这是INSERT视图(插入到MongoDB中)的样子:(没有单个值,因为它们不相关,所以此处将其切除)

enter image description here

0 个答案:

没有答案