none
C#/WPF: Wie stellt man Daten aus der DB in einem DataGrid dar? RRS feed

  • Frage

  • Hallo, 

    Ich möchte gerne meine Daten aus der Datenbank visuell in meinem Programm in Echtzeit angezeigt haben. Wie funktioniert das? Ich vermute ja mit einem DataGrid, allerdings ist da die Frage, wie ich in das DataGrid die Daten aus der DB bekomme. 

    Dienstag, 8. Oktober 2019 18:46

Alle Antworten

  • Hi,
    hier mal eine kleine Demo als Anregung. In der Oberfläche wird ein DataContext auf die implizite Instanz eines ViewModels gesetzt. Die Datenquelle des DataGrid wird an die Eigenschaft "View" gebunden, die eine Auflistung der Daten bereitstellt. Die Daten selbst werden bei der impliziten Instanziierung im Constructor mittels SQLDataAdapter in eine DataTable geladen. Die Verbindungszeichenfolge steht in den Einstellungen des Projektes ("cn").

    XAML:

    <Window x:Class="WpfApp1.Window70"
            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:WpfApp1"
            mc:Ignorable="d"
            Title="Window70" Height="450" Width="800">
      <Window.DataContext>
        <local:Window70ViewModel/>
      </Window.DataContext>
        <Grid>
        <DataGrid ItemsSource="{Binding View}"/>
      </Grid>
    </Window>

    Und dazu die Klasse mit dem ViewModel:

    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Windows;
    using System.Windows.Data;
    
    namespace WpfApp1
    {
      class Window70ViewModel
      {
        public Window70ViewModel()
        {
          using (SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Tab1", Properties.Settings.Default.cn))
          {
            DataTable dt = new DataTable();
            da.Fill(dt);
            cvs.Source = dt;
          }
        }
        private CollectionViewSource cvs = new CollectionViewSource();
        public ICollectionView View { get => cvs.View; }
      }
    }


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Mittwoch, 9. Oktober 2019 05:39
  • Ok. Alles klar. 
    Aber das mit dem "cn" verstehe ich noch nicht so richtig. Also diese Verbindungszeichenfolge. Kannst du mir das vielleicht noch ein bisschen genauer erklären? 
    Donnerstag, 10. Oktober 2019 11:37
  • Hi,
    klick mit der rechten Maustaste auf das Projekt, öffne die Eigenschaften des Projektes, öffne die Einstellungen und trage die Verbindungszeichenfolge (beim mir im Beispiel cn) ein.



    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks



    Donnerstag, 10. Oktober 2019 16:53
  • Ok. Alles klar. Vielen Dank! Aber was haben diese Einstellungen für einen Sinn bzw. tieferen Sinn? Gibt es da irgendwo ein offizielen MSDN Eintrag? 
    Donnerstag, 10. Oktober 2019 17:10
  • Ach so und wie müsste man da jetzt cn initialisieren?
    Donnerstag, 10. Oktober 2019 17:31
  • Hi,
    Du hast von einer Datenbank geschrieben. Die Verbindungszeichenfolge wird entsprechend Parameter der Datenbank aufgebaut. In meinem Beispiel handelt es sich um einen SQL Server. Mit Windows Authentifizierung kann die Zeichenfolge so aussehen:

    Data Source=<Servername>;Initial Catalog=<Datenbankname>;Integrated Security=True

    Für andere Datenbanken kannst Du Dir Ideen holen von https://www.connectionstrings.com.


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Freitag, 11. Oktober 2019 03:10