none
WPF(VB) - ComboBox mit SQL-Daten füllen RRS feed

  • Frage

  • Hallo Zusammen,
    ich möchte Mitarbeiterinformationen, die in einer SQL Datenbank als Tabelle abliegen Nutzen, um die Namen (eine Spalte in der Tabelle) in einer Combobox anwählbar zu machen.

    Über die Suchfunktionen finde ich immer nur ein ComboBox.DataSource .. Diese Eigenschaft gibt es bei mir aber nicht.

    Am liebsten würde ich mit dem dafür vorgesehenen Tableadapter, der alle Namen der Tabelle zurückgibt, eine ComboBox füllen.Über den selbsterstellten Tableadapter "InsertUser" kann ich aus einer Reihe eingegebener Daten aus einer TextBox, diese in die Tabelle einfügen. Ich bekomme es aber strikt nicht auf die Reihe, Daten aus der Tabelle auszulesen.

    Hat jemand hierzu eine Example oder kann mir die zwei Zeilen niederschreiben? ..

    Vielen Dank im Voraus !

    Dienstag, 12. März 2019 12:08

Antworten

  • Combobox.DataSource gibt es bei WinForms, bei WPF ist es die Itemssource, siehe https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.combobox?view=netframework-4.7.2

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 12. März 2019 13:30
  • Hi,
    hier mal eine Demo in VB.NET mit dem MVVM Entwurfsmuster und einer Access-Datenbank, der ConnectionString in den Settings (app.config) des Projektes steht.

    XAML:

    <Window x:Class="Window03"
            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="Window03" Height="450" Width="800">
      <Window.Resources>
        <local:Window03VM x:Key="vm"/>
      </Window.Resources>
      <StackPanel DataContext="{StaticResource vm}">
        <ComboBox ItemsSource="{Binding View}" DisplayMemberPath="Name"/>
      </StackPanel>
    </Window>

    ViewModel:

    Imports System.ComponentModel
    Imports System.Data
    Imports System.Data.OleDb
    
    Public Class Window03VM
    
      Private cvs As New CollectionViewSource
      Public ReadOnly Property View As ICollectionView
        Get
          cvs.Source = GetData()
          Return cvs.View
        End Get
      End Property
    
      Private Function GetData() As DataTable
        Using da As New OleDbDataAdapter("SELECT Name FROM Tab1", My.Settings.cnMdb)
          Dim dt As New DataTable
          da.Fill(dt)
          Return dt
        End Using
      End Function
    End Class


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

    Dienstag, 12. März 2019 13:50

Alle Antworten

  • Combobox.DataSource gibt es bei WinForms, bei WPF ist es die Itemssource, siehe https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.combobox?view=netframework-4.7.2

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 12. März 2019 13:30
  • Hi,
    hier mal eine Demo in VB.NET mit dem MVVM Entwurfsmuster und einer Access-Datenbank, der ConnectionString in den Settings (app.config) des Projektes steht.

    XAML:

    <Window x:Class="Window03"
            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="Window03" Height="450" Width="800">
      <Window.Resources>
        <local:Window03VM x:Key="vm"/>
      </Window.Resources>
      <StackPanel DataContext="{StaticResource vm}">
        <ComboBox ItemsSource="{Binding View}" DisplayMemberPath="Name"/>
      </StackPanel>
    </Window>

    ViewModel:

    Imports System.ComponentModel
    Imports System.Data
    Imports System.Data.OleDb
    
    Public Class Window03VM
    
      Private cvs As New CollectionViewSource
      Public ReadOnly Property View As ICollectionView
        Get
          cvs.Source = GetData()
          Return cvs.View
        End Get
      End Property
    
      Private Function GetData() As DataTable
        Using da As New OleDbDataAdapter("SELECT Name FROM Tab1", My.Settings.cnMdb)
          Dim dt As New DataTable
          da.Fill(dt)
          Return dt
        End Using
      End Function
    End Class


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

    Dienstag, 12. März 2019 13:50