myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und XAML » Im DataGrid nur die ID der ausgewählten Zeile auslesen?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
wlfmario wlfmario ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.11.2018
Beiträge: 12
Entwicklungsumgebung: Visual Studio Express
Herkunft: Dormagen


wlfmario ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

XML-Code:
<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.
02.01.2020 01:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Jamikus Jamikus ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.11.2012
Beiträge: 232
Entwicklungsumgebung: MS Visual
Herkunft: Oberhausen (NRW)


Jamikus ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 02.01.2020 08:26.

02.01.2020 08:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
wlfmario wlfmario ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.11.2018
Beiträge: 12
Entwicklungsumgebung: Visual Studio Express
Herkunft: Dormagen

Themenstarter Thema begonnen von wlfmario

wlfmario ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das habe ich versucht nur leider stehe ich da noch auf dem Schlauch.

XML-Code:
<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 .

C#-Code:
private void _Löschen_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            int sid = StandID ??????????????????
        }
03.01.2020 15:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Papst Papst ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.09.2014
Beiträge: 274
Entwicklungsumgebung: VS2017
Herkunft: Kassel


Papst ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 03.01.2020 15:18.

03.01.2020 15:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.938
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

...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.
03.01.2020 16:07 Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 5 Monate.
Spooner8 Spooner8 ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.06.2020
Beiträge: 7
Entwicklungsumgebung: Visual Studio 2019
Herkunft: Schweiz


Spooner8 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

XML-Code:
<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.
30.06.2020 13:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.938
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
30.06.2020 13:53 Beiträge des Benutzers | zu Buddylist hinzufügen
Spooner8 Spooner8 ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.06.2020
Beiträge: 7
Entwicklungsumgebung: Visual Studio 2019
Herkunft: Schweiz


Spooner8 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
30.06.2020 16:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.938
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
30.06.2020 19:01 Beiträge des Benutzers | zu Buddylist hinzufügen
Spooner8 Spooner8 ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.06.2020
Beiträge: 7
Entwicklungsumgebung: Visual Studio 2019
Herkunft: Schweiz


Spooner8 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
30.06.2020 21:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Papst Papst ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.09.2014
Beiträge: 274
Entwicklungsumgebung: VS2017
Herkunft: Kassel


Papst ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
30.06.2020 22:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Spooner8 Spooner8 ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.06.2020
Beiträge: 7
Entwicklungsumgebung: Visual Studio 2019
Herkunft: Schweiz


Spooner8 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
01.07.2020 18:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Papst Papst ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.09.2014
Beiträge: 274
Entwicklungsumgebung: VS2017
Herkunft: Kassel


Papst ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

In erster Linie geht es um das separieren der Logik.
Dass du einmal implementierte Commands doppelt nutzen kannst ist aus meiner Sicht ein Nebeneffekt.
02.07.2020 21:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 6 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 04.07.2020 12:32