Laden...

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

Erstellt von wlfmario vor 4 Jahren Letzter Beitrag vor 3 Jahren 2.030 Views
W
wlfmario Themenstarter:in
12 Beiträge seit 2018
vor 4 Jahren
Im DataGrid nur die ID der ausgewählten Zeile auslesen?

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.

J
251 Beiträge seit 2012
vor 4 Jahren

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.

W
wlfmario Themenstarter:in
12 Beiträge seit 2018
vor 4 Jahren

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 ??????????????????
        }

P
441 Beiträge seit 2014
vor 4 Jahren

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.

16.825 Beiträge seit 2008
vor 4 Jahren

...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.

S
40 Beiträge seit 2020
vor 3 Jahren

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.

16.825 Beiträge seit 2008
vor 3 Jahren

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

S
40 Beiträge seit 2020
vor 3 Jahren

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

16.825 Beiträge seit 2008
vor 3 Jahren

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.

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.

S
40 Beiträge seit 2020
vor 3 Jahren

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.

P
441 Beiträge seit 2014
vor 3 Jahren

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.

S
40 Beiträge seit 2020
vor 3 Jahren

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

P
441 Beiträge seit 2014
vor 3 Jahren

In erster Linie geht es um das separieren der Logik.
Dass du einmal implementierte Commands doppelt nutzen kannst ist aus meiner Sicht ein Nebeneffekt.