Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Im DataGrid nur die ID der ausgewählten Zeile auslesen?
wlfmario
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: Dormagen

Themenstarter:

Im DataGrid nur die ID der ausgewählten Zeile auslesen?

beantworten | zitieren | melden

Hallo zusammen und ein Frohes neues Jahr.

Ich brauchte da mal ein kleinen Gedankenanstoß, der bestimmt wieder Simpel zu lösen ist.

Und zwar habe ich ein DataGrid das ich mit Daten aus der DB befülle, die ID wird zwar gelesen aber nicht angezeigt.

<DataGrid.Columns>
                <DataGridTextColumn Header="StandID" Binding="{Binding StandID}" Visibility="Hidden" />
                <DataGridTextColumn Header="Bezeichnung:" Binding="{Binding StandBezeichnung}" Width="200" IsReadOnly="True" />
Jetzt möchte ich für eine SQL Anweisung die StandID in eine Variabel Speichern von dessen Reihe die Markiert ist.

Ich habe Heute schon so einiges versucht und gelesen, doch irgenwie komme ich nicht an das Ergebnis.

Daher brauchte ich mal so ein kleinen Anstoß in die richtige Richtung.
private Nachricht | Beiträge des Benutzers
Jamikus
myCSharp.de - Member



Dabei seit:
Beiträge: 254
Herkunft: Oberhausen (NRW)

beantworten | zitieren | melden

Hallo,

die nicht sichtbare Anzeige ist das Resultat, wenn man die Sichtbarkeit auf "versteckt" setzt (Visibility="Hidden").

Beim Datagrid selbst kann man auf SelectedItem binden.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Jamikus am .
private Nachricht | Beiträge des Benutzers
wlfmario
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: Dormagen

Themenstarter:

beantworten | zitieren | melden

Das habe ich versucht nur leider stehe ich da noch auf dem Schlauch.
<DataGrid x:Name="StandID" ItemsSource="{Binding}" Height="Auto" VerticalAlignment="Top" Grid.Row="1" SelectedItem="{Binding StandID}" >

Wenn ich jetzt aber die StandID auslesen möchte, hapert es .


private void _Löschen_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            int sid = StandID ??????????????????
        }
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 403
Herkunft: Kassel

beantworten | zitieren | melden

Nutze ein Command, bzw. ein RelayCommand innerhalb deines ViewModels, dass du an den Löschen Button bindest (anstatt des Click Handlers in der Code Behind). dann kannst du aus dem RelayCommand auf die per Databinding gekoppelte Property des ViewModels mit dem Selected Item zugreifen.

MVVM in WPF bietet nicht nur Databindings, sondern auch Command Bindings.
Im besten Fall ist in der CodeBehind nur ein Aufruf an InitializeComponent();

P.S.: Das Binding hat als Inhalt nicht die ID, sondern ein Stand Objekt.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Papst am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16204

beantworten | zitieren | melden

...und wenn Du schon Deutsch programmierst, was immer zu einem übel lesenden Käse wird, lass doch wenigstens die Umlaute weg und beachte [Artikel] C#: Richtlinien für die Namensvergabe wenigstens ein bisschen....
Ansonsten ist bereits im Prinzip alles gesagt: halte Dich einfach an MVVM, wenn Du WPF verwendest.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Spooner8
myCSharp.de - Member



Dabei seit:
Beiträge: 7
Herkunft: Schweiz

beantworten | zitieren | melden

Hallo zusammen

Ich habe im Grundsatz das selbe Problem, kann aber mit der Antwort noch nichts so richtig was anfangen.

Kurz meine Situation und was ich brauche:
Ich habe ein DataGrid und das ist gebunden an eine kleine lokale Datenbank. Die habe ich dann automatisch implementieren lassen und als Source das Binding gemacht
<StackPanel Margin="10" DataContext="{StaticResource tbl_ArtikeltypenViewSource}">
        <ScrollViewer VerticalScrollBarVisibility="Auto">
            <DataGrid x:Name="dg_Artikelauswahl" MinHeight="200" IsReadOnly="True" ItemsSource="{Binding}" SelectionChanged="dg_Artikelauswahl_SelectionChanged"/>
        </ScrollViewer>

        <Button x:Name="btn_Erfassen" Content="Erfassen" Click="btn_Erfassen_Click"/>

    </StackPanel>

Nun möchte ich gerne mit dem btn_Erfassen auslösen, dass von der markierten Zeile der Inhalt der zweiten Spalte in eine Variable vom Typ string geschrieben wird um diese später für mein Factory Method Pattern zur Auswahl des spezifischen Artikels zu übergeben.
Ich bekomme es aber nicht hin diese spezifische Zelle als string zu erfassen.

Kann mir da einer einen Tipp geben wie das geht?

Die Tabelle hat 3 Spalten (Artikelnummer / Bezeichnung / Artikelgruppe
und die Bezeichnung der gewählten Zeile brauch ich dann um das richtige Objekt zu instanziieren und damit das richtige Konfigurationsfenster für die bearbeitung dieses Objekt zu öffnen.

Danke für die Hilfe.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16204

beantworten | zitieren | melden

Auch hier das Problem, dass Du eben kein MVVM machst; WPF dafür eben aber ausgelegt ist.

Mit MVVM hast Du bei SelectionChanged ein entsprechenden Command, dem das selektierte Item (typisiert) übergeben wird, sodass Du direkt drauf zugreifen kannst.
Alternativ würdest Du SelectedIndex vom Grid binden und dann auf die gebundene Collection zugreifen.

Den "String schreiben" kannst Du dann über das gebundene Item und die gebundene Property.

[Artikel] MVVM und DataBinding
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Spooner8
myCSharp.de - Member



Dabei seit:
Beiträge: 7
Herkunft: Schweiz

beantworten | zitieren | melden

Hi

Ich habe das Thema MVVM schon einmal durch geschaut, aber ich muss zugeben das ich von der Person her so meine Problemchen habe etwas zu verstehen wo ich nicht sehe was etwas was ich brauche genau macht und was dort passiert. Ich werde es sicherlich noch einmal genauer anschauen.

Woran siehst du nun das ich offenbar kein MVVM mache?

PS: Die SelectionChanged Methode benutze ich aktuell nur um den Button zu deaktivieren wenn noch keine Auswahl gemacht wurde. So kann ich kurz und knapp verhindern, dass ein Absturz passiert wenn einer auf den Button klickt ohne eine Auswahl getroffen zu haben.

Andere Frage: Gibt es hier einen Bereich wo sich Personen im näheren Umkreis finden lassen um vielleicht einfach mal zusammen zu hocken. Manches lässt sich in einem Gespräch einfach wesentlich besser verstehen und man kann direkt seine Frage platzieren. Nur Youtube und Foren sind teilweise zu wenig.

Gruss Spooner
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16204

beantworten | zitieren | melden

Zitat von Spooner8
Woran siehst du nun das ich offenbar kein MVVM mache?
An den Events, weil man das in der Form in MVVM einfach nicht so macht.

Zitat von Spooner8

Andere Frage: Gibt es hier einen Bereich wo sich Personen im näheren Umkreis finden lassen um vielleicht einfach mal zusammen zu hocken.

Helfer in Foren machen das ja alles in ihrer Freizeit, kostenlos.
Musst halt Glück haben, dass jemand bei Dir in der Umgebung sowas auch in der Form persönlich machen würde.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Spooner8
myCSharp.de - Member



Dabei seit:
Beiträge: 7
Herkunft: Schweiz

beantworten | zitieren | melden

Also du meinst in dem Falle das "Click" Event vom Button und das "SelectionChanged" Event vom DataGrid richtig?

Das würde mich dann doch erneut verwirren =( Wenn ich da nicht den Link zum Code gebe wo dann?

Bezüglich den Helfer ist mir das klar und ich bin dankbar für jeden Tipp den ich bekommen kann. Allerdings werden in Foren eben auch oft Antworten verteilt die mit möglichst vielen Fachbegriffen beschrieben werden die ein Anfänger (wie ich) dann weder verstehen noch nachvollziehen kann. Deswegen auch die Frage nach Kontakten.
Kostenlos ist hier dann von mir aus auch nicht mehr das Thema, ausser man möchte das natürlich gerne.

Mal schauen wie weit ich zum Thema MVVM das Verständnis aufbauen kann.
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 403
Herkunft: Kassel

beantworten | zitieren | melden

Events in MVVM behandelst du mit Commands.
Das OnClick Event bei z.B. einem Button kannst du direkt mit einem CommandBinding abfangen. Bei den anderen Events muss man etwas drum herum bauen (leider).

Im .Net Framework gab es daür das Paket System.Windows.Interactivity. Wie das bei .Net Core aussieht weiß ich nicht aus dem Kopf - aber vermutlich ähnlich.
private Nachricht | Beiträge des Benutzers
Spooner8
myCSharp.de - Member



Dabei seit:
Beiträge: 7
Herkunft: Schweiz

beantworten | zitieren | melden

Hi Papst

Danke für deine Antwort. Das hilft mir schon mal etwas weiter das ganze zu verstehen.
Das wird so gemacht, dass quasi mit verschiedenen Buttons der selbe Command ausgeführt werden kann und er wird nur einmal geschrieben. Ist das so richtig?

Und wenn das konsequent gemacht wird, macht man das auch wenn der Command nur ein einziges mal benötigt wird und auch da nicht mit einem Click_Event.

Habe ich das soweit richtig verstadnden?

Gruss Spooner
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 403
Herkunft: Kassel

beantworten | zitieren | melden

In erster Linie geht es um das separieren der Logik.
Dass du einmal implementierte Commands doppelt nutzen kannst ist aus meiner Sicht ein Nebeneffekt.
private Nachricht | Beiträge des Benutzers