DataSource-Eigenschaft für DataGrid mit XAML festlegen.

  • WPF

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    DataSource-Eigenschaft für DataGrid mit XAML festlegen.

    Hallo alle zusammen.
    Möchte gerne im folgenden Beispiel die datasource für das DataGrid im XAML Code festlegen.
    Weiss vieleicht jemand was da nicht klappt?

    XML-Quellcode

    1. <Window x:Class="MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:local="clr-namespace:ImportFromExcel"
    5. Title="MainWindow" Height="350" Width="525">
    6. <Window.Resources><!--<local:AdressesCVS x:Key="adrCVS"/>-->
    7. <!--<CollectionViewSource Source="{StaticResource AdressesCVS}" x:Key="adrCVS"/>-->
    8. <CollectionViewSource Source="AdressesCVS" x:Key="adrCVS"/>
    9. </Window.Resources>
    10. <Grid DataContext="{Binding Source={StaticResource adrCVS}}">
    11. <DataGrid ItemsSource="{Binding}"
    12. AutoGenerateColumns="True" Height="161" HorizontalAlignment="Left" Margin="12,138,0,0" Name="DataGrid1" VerticalAlignment="Top" Width="479" />
    13. <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="12,24,0,0" Name="Button1" VerticalAlignment="Top" Width="75" />
    14. <ListBox ItemsSource="{Binding}" DisplayMemberPath="Nom"
    15. Height="100" HorizontalAlignment="Left" Margin="180,24,0,0" Name="ListBox1" VerticalAlignment="Top" Width="153" /></Grid>
    16. </Window>

    VB.NET-Quellcode

    1. Class MainWindow
    2. Public AdressesCVS As CollectionViewSource
    3. Private AdressesDS As System.Data.DataSetPublic Sub New()
    4. ' Dieser Aufruf ist für den Designer erforderlich.
    5. InitializeComponent()
    6. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
    7. 'AdressesCVS = DirectCast(Me.Resources("AdressesCVS"), CollectionViewSource)
    8. AdressesCVS = New CollectionViewSource
    9. End SubPrivate Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
    10. Dim MyConnection As System.Data.OleDb.OleDbConnection
    11. Dim MyCommand As System.Data.OleDb.OleDbDataAdapterMyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Users\.....\adresses.xls';Extended Properties=Excel 8.0;")
    12. MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [coordonnées$]", MyConnection)MyCommand.TableMappings.Add("Table", "Aresses staff.")
    13. AdressesDS = New System.Data.DataSet
    14. MyCommand.Fill(AdressesDS)
    15. AdressesCVS.Source = AdressesDS.Tables(0)
    16. MyConnection.Close()
    17. 'ListBox1.DataContext = AdressesCVS
    18. 'DataGrid1.DataContext = AdressesCVS
    19. End SubEnd Class

    Setze ich die Datasource-Eigenschaft im Code-behind, dann zeigt das Grid die Daten an.
    Wie setzt man diese Eigenschft im xalml Code?
    Vielen Dank im voraus,
    Jeiss
    Hallo ErfinderDesRades,

    Ich poste den Code dann liebern nocheinmal, aber diesmal mit dem Quellcode-Editor. ;)

    Aber muss leider zugeben, dass mich deine Antwort nicht weiter bringt. :(

    Hast du dir den "unlesbaren" Code trotzdem angeschaut? Könntest du dich vieleicht ein bischen "klarer" ausdrücken?

    XML-Quellcode

    1. <Window x:Class="MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:local="clr-namespace:ImportFromExcel"
    5. Title="MainWindow" Height="350" Width="525">
    6. <Window.Resources>
    7. <!--<local:AdressesCVS x:Key="adrCVS"/>-->
    8. <!--<CollectionViewSource Source="{StaticResource AdressesCVS}" x:Key="adrCVS"/>-->
    9. <CollectionViewSource Source="AdressesCVS" x:Key="adrCVS"/>
    10. </Window.Resources>
    11. <Grid DataContext="{Binding Source={StaticResource adrCVS}}">
    12. <DataGrid ItemsSource="{Binding}"
    13. AutoGenerateColumns="True" Height="161" HorizontalAlignment="Left" Margin="12,138,0,0" Name="DataGrid1" VerticalAlignment="Top" Width="479" />
    14. <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="12,24,0,0" Name="Button1" VerticalAlignment="Top" Width="75" />
    15. <ListBox ItemsSource="{Binding}" DisplayMemberPath="Nom"
    16. Height="100" HorizontalAlignment="Left" Margin="180,24,0,0" Name="ListBox1" VerticalAlignment="Top" Width="153" />
    17. </Grid>
    18. </Window>

    VB.NET-Quellcode

    1. Class MainWindow
    2. Public AdressesCVS As CollectionViewSource
    3. Private AdressesDS As System.Data.DataSet
    4. Public Sub New()
    5. ' Dieser Aufruf ist für den Designer erforderlich.
    6. InitializeComponent()
    7. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
    8. 'AdressesCVS = DirectCast(Me.Resources("AdressesCVS"), CollectionViewSource)
    9. AdressesCVS = New CollectionViewSource
    10. End Sub
    11. Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
    12. Dim MyConnection As System.Data.OleDb.OleDbConnection
    13. Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
    14. MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Users\...\adresses.xls';Extended Properties=Excel 8.0;")
    15. MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [coordonnées$]", MyConnection)
    16. MyCommand.TableMappings.Add("Table", "Aresses staff.")
    17. AdressesDS = New System.Data.DataSet
    18. MyCommand.Fill(AdressesDS)
    19. AdressesCVS.Source = AdressesDS.Tables(0)
    20. MyConnection.Close()
    21. 'ListBox1.DataContext = AdressesCVS
    22. DataGrid1.DataContext = AdressesCVS
    23. End Sub
    24. End Class

    Um es "klarer auszudrücken. In meinem Beispiel geht es ja darum die CollectionViewSource "AdressesCVS" aus MainWindow.xam.vb in den Windows.resources des xaml Codes zu "deklarieren", oder?
    Dank im voraus,
    Jeiss
    Nö! Hat leider nicht geklappt. Und mit hoffen, das klappt bestimmt nicht. Ich hoffe schon zwei Tage lang!!!
    Ich zippe mein Projekt mal und lade es einfach mal hoch.
    Ah, noch was!
    im vb einkommentieren: #11,

    Aber der DataContext soll ja im xaml gesetz werden, und nicht im Code-behind.......

    Danke,
    Jeiss
    Dateien

    Jeiss schrieb:

    Aber der DataContext soll ja im xaml gesetz werden, und nicht im Code-behind.......

    ja wird er doch.

    Also #11 lässt den DataContext im Xaml instanzieren, und holt ihn sich aussm Xaml.

    #12 hingegen instanziert einfach eine CollectionViewSource, die mittm Xaml garnix zu tun hat.

    ah - vlt. kommich drauf:

    XML-Quellcode

    1. <Window x:Class="MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:local="clr-namespace:ImportFromExcel"
    5. Title="MainWindow" Height="350" Width="525">
    6. <Window.Resources>
    7. <local:AdressesCVS x:Key="AdressesCVS"/>
    8. <CollectionViewSource Source="{StaticResource AdressesCVS}" x:Key="adrCVS"/>
    9. </Window.Resources>
    10. <Grid DataContext="{Binding Source={StaticResource adrCVS}}">
    11. <DataGrid ItemsSource="{Binding}"
    12. AutoGenerateColumns="True" Height="161" HorizontalAlignment="Left" Margin="12,138,0,0" Name="DataGrid1" VerticalAlignment="Top" Width="479" />
    13. <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="12,24,0,0" Name="Button1" VerticalAlignment="Top" Width="75" />
    14. <ListBox ItemsSource="{Binding}" DisplayMemberPath="Nom"
    15. Height="100" HorizontalAlignment="Left" Margin="180,24,0,0" Name="ListBox1" VerticalAlignment="Top" Width="153" />
    16. </Grid>
    17. </Window>

    ach - auch nich.
    keine Ahnung, was ein local:AddressCVS ist, und was du im Codebehind da mitte CollectionViewSource treibst.
    vlt. sollteste im Codebehind nicht auf der CollectionViewSource rumorgeln, sondern auf dem AddressCVS-Dingens.
    Hi ErfinderDesRades,
    ach - auch nich.
    keine Ahnung, was ein local:AddressCVS ist, und was du im Codebehind da mitte CollectionViewSource treibst.

    Ja, um dir den Durchblick zu verschaffen, müsstest du dir wenigstens mal die zip-Datei mit meinem Projekt anschauen.
    Kann aber verstehen dass du am Wochenend keinen Bock drauf hast....
    Hatte eben nur gehofft hier imForum würde sich jemand Bemühen um mir weiter zu helfen.
    Ist egal, habs wenigstens versucht. ;(

    Danke,
    Jeiss