Powershell Status Checkbox im Datagridview
H41mSh1C0R (Level 3) - Jetzt verbinden
25.01.2016, aktualisiert 17:47 Uhr, 2430 Aufrufe, 9 Kommentare
Hi@ps Profi's
man muss ja das Rad nicht neu Erfinden und im Netz fand ich diese kleine Funktion.
Wenn ich die auf mein Datagridview loslasse liefert sie allerdings nicht das korrekte Ergebnis:
Erst wenn der Fokus auf eine andere Zeile statt der zuletzt aktivierten liegt wird der Status der Checkboxen korrekt geprüft.
Jetzt könnte man ja beim Ausführen der Funktion eine neue aktive Zeile setzen, aber ist das so gewollt vom DGV das der Wert($true/$false) erst beim Zellenwechsel übernommen wird?
EDIT: Das Wechseln der aktiven Zeile liefert auch nicht das korrekt Verhalten. Erst wenn ich eine andere Zeile anklicke DANN nimmt er den korrekten Status. *grübel*
Gruß vom H41mSh1C0r
man muss ja das Rad nicht neu Erfinden und im Netz fand ich diese kleine Funktion.
Function Do-Grid{
for($i=0;$i -lt $datagridview1.RowCount;$i++){
if($datagridview1.Rows[$i].Cells[6].Value -eq $true)
{
write-host "cell #$i is checked"
#uncheck it
}
else
{
#check it
write-host "cell #$i is not-checked"
}
}
}
Wenn ich die auf mein Datagridview loslasse liefert sie allerdings nicht das korrekte Ergebnis:
########### Zeile 1 und 2 checked, Focus auf Zeile 2
cell #0 is checked
cell #1 is not-checked
cell #2 is not-checked
cell #3 is not-checked
########### Zeile 1 und 2 checked, Focus auf Zeile 3
cell #0 is checked
cell #1 is checked
cell #2 is not-checked
cell #3 is not-checked
Erst wenn der Fokus auf eine andere Zeile statt der zuletzt aktivierten liegt wird der Status der Checkboxen korrekt geprüft.
Jetzt könnte man ja beim Ausführen der Funktion eine neue aktive Zeile setzen, aber ist das so gewollt vom DGV das der Wert($true/$false) erst beim Zellenwechsel übernommen wird?
EDIT: Das Wechseln der aktiven Zeile liefert auch nicht das korrekt Verhalten. Erst wenn ich eine andere Zeile anklicke DANN nimmt er den korrekten Status. *grübel*
Gruß vom H41mSh1C0r
9 Antworten
- LÖSUNG 114757 schreibt am 25.01.2016 um 17:32:53 Uhr
- LÖSUNG H41mSh1C0R schreibt am 25.01.2016 um 17:47:41 Uhr
- LÖSUNG 114757 schreibt am 25.01.2016 um 17:49:47 Uhr
- LÖSUNG H41mSh1C0R schreibt am 25.01.2016 um 17:58:59 Uhr
- LÖSUNG 114757 schreibt am 25.01.2016 um 18:01:13 Uhr
- LÖSUNG H41mSh1C0R schreibt am 25.01.2016 um 18:04:49 Uhr
- LÖSUNG 114757 schreibt am 25.01.2016 um 18:10:59 Uhr
- LÖSUNG H41mSh1C0R schreibt am 25.01.2016 um 18:20:08 Uhr
- LÖSUNG 114757 schreibt am 25.01.2016 um 18:10:59 Uhr
- LÖSUNG H41mSh1C0R schreibt am 25.01.2016 um 18:04:49 Uhr
- LÖSUNG 114757 schreibt am 25.01.2016 um 18:01:13 Uhr
- LÖSUNG H41mSh1C0R schreibt am 26.01.2016 um 11:57:13 Uhr
- LÖSUNG H41mSh1C0R schreibt am 25.01.2016 um 17:58:59 Uhr
- LÖSUNG 114757 schreibt am 25.01.2016 um 17:49:47 Uhr
- LÖSUNG H41mSh1C0R schreibt am 25.01.2016 um 17:47:41 Uhr
LÖSUNG 25.01.2016, aktualisiert um 17:47 Uhr
Normales Verhalten!
Das Datagridview ist Primär auf den Fokus von Datenbank-Anwendungen getrimmt bei denen in Update erst dann geschieht wenn die Zeile commitet (abgespeichert) wird, denn man kann im Datagridview auch alle Änderungen einer Zeile rückgängig machen (discard changes).
Man kann den Status jeder Zeile Abfragen ob sie Dirty ist. Schau dir im MSDN einfach mal die vielfältigen Eigenschaften und Evnts an die das DGV liefert.
https://msdn.microsoft.com/de-de/library/system.windows.forms.datagridvi ...
Gruß jodel32
Das Datagridview ist Primär auf den Fokus von Datenbank-Anwendungen getrimmt bei denen in Update erst dann geschieht wenn die Zeile commitet (abgespeichert) wird, denn man kann im Datagridview auch alle Änderungen einer Zeile rückgängig machen (discard changes).
Man kann den Status jeder Zeile Abfragen ob sie Dirty ist. Schau dir im MSDN einfach mal die vielfältigen Eigenschaften und Evnts an die das DGV liefert.
https://msdn.microsoft.com/de-de/library/system.windows.forms.datagridvi ...
Gruß jodel32
LÖSUNG 25.01.2016 um 17:47 Uhr
Oki =)
Danke dir.
Danke dir.
LÖSUNG 25.01.2016, aktualisiert um 17:51 Uhr
LÖSUNG 25.01.2016 um 17:58 Uhr
Jupp hab ich aus deinem ersten Post rausgelesen =).
Wird noch eine lange Nacht heute.
Wird noch eine lange Nacht heute.
LÖSUNG 25.01.2016, aktualisiert um 18:02 Uhr
LÖSUNG 25.01.2016 um 18:04 Uhr
Wegen mir brauchst du nicht extra wachbleiben. =) Nochmals Danke für alles bisher.
Ich brech erstmal alles auf Kleinstprobleme runter und was ich heute nicht schaffe muss morgen bzw. bis mi 12 Uhr fertsch sein. =)
Ein DGV Knoten hab ich noch, obwohl ich an 2 Stellen quasi das gleiche mache gehts beim 2ten nicht, das ist aber Kategorie "Schleifchen", da man zur Not das XML auch anpacken kann.
Ich brech erstmal alles auf Kleinstprobleme runter und was ich heute nicht schaffe muss morgen bzw. bis mi 12 Uhr fertsch sein. =)
Ein DGV Knoten hab ich noch, obwohl ich an 2 Stellen quasi das gleiche mache gehts beim 2ten nicht, das ist aber Kategorie "Schleifchen", da man zur Not das XML auch anpacken kann.
LÖSUNG 25.01.2016, aktualisiert um 18:11 Uhr
Such mal nach
xml serialization datagridview
Dann kannst du dir deine Schleifchen sparen wenn es nur darum geht den Inhalt eines DGV in eine XML zu pressen oder zu Laden.
xml serialization datagridview
Dann kannst du dir deine Schleifchen sparen wenn es nur darum geht den Inhalt eines DGV in eine XML zu pressen oder zu Laden.
LÖSUNG 25.01.2016 um 18:20 Uhr
Danke dir.
Ich füll das Datagrid aus dem Dateisystem bzw. aus dem XML, da im XML mehr enthalten ist als im DGV komme ich nicht darum mir die Einträge zusammenzubauen und dann in das DGV zu schreiben.
Es gibt bestimmt schönere Wege als meine Umsetzung, aber mir brennt immo leider die Zeit weg.
Daher wird das alles zusammengeknotet und versucht so modular wie möglich zu gestalten das man am Ende die Funktionen austauschen kann, wenn man mit dem lernen hinterherkommen ist.
Ich füll das Datagrid aus dem Dateisystem bzw. aus dem XML, da im XML mehr enthalten ist als im DGV komme ich nicht darum mir die Einträge zusammenzubauen und dann in das DGV zu schreiben.
Es gibt bestimmt schönere Wege als meine Umsetzung, aber mir brennt immo leider die Zeit weg.
Daher wird das alles zusammengeknotet und versucht so modular wie möglich zu gestalten das man am Ende die Funktionen austauschen kann, wenn man mit dem lernen hinterherkommen ist.
LÖSUNG 26.01.2016, aktualisiert um 12:11 Uhr
Zitat von @114757:
Genauer gesagt diese Eigenschaft hier ist dein Freund:
DataGridView.IsCurrentRowDirty-Eigenschaft
Genauer gesagt diese Eigenschaft hier ist dein Freund:
DataGridView.IsCurrentRowDirty-Eigenschaft
Lösung: =)
CurrentCellDirtyStateChanged
Write-Host "CurrentCellDirtyStateChanged fired!"
if ($datagridview_main.IsCurrentCellDirty)
{
$datagridview_main.CommitEdit([System.Windows.Forms.DataGridViewDataErrorContexts]::Commit)
Write-Host "commit!"
}