h41msh1c0r
Goto Top

Powershell Status Checkbox im Datagridview

Hi@PS Profi's

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

Content-Key: 294199

Url: https://administrator.de/contentid/294199

Printed on: April 19, 2024 at 23:04 o'clock

Mitglied: 114757
Solution 114757 Jan 25, 2016 updated at 16:47:45 (UTC)
Goto Top
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
Member: H41mSh1C0R
H41mSh1C0R Jan 25, 2016 at 16:47:41 (UTC)
Goto Top
Oki =)

Danke dir.
Mitglied: 114757
114757 Jan 25, 2016 updated at 16:51:16 (UTC)
Goto Top
Genauer gesagt diese Eigenschaft hier ist dein Freund:
DataGridView.IsCurrentRowDirty-Eigenschaft
Member: H41mSh1C0R
H41mSh1C0R Jan 25, 2016 at 16:58:59 (UTC)
Goto Top
Jupp hab ich aus deinem ersten Post rausgelesen =).

Wird noch eine lange Nacht heute.
Mitglied: 114757
114757 Jan 25, 2016 updated at 17:02:13 (UTC)
Goto Top
Zitat von @H41mSh1C0R:
Wird noch eine lange Nacht heute.
Muss ich wach bleiben face-smile? Duck und wech ....
Member: H41mSh1C0R
H41mSh1C0R Jan 25, 2016 at 17:04:49 (UTC)
Goto Top
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.
Mitglied: 114757
114757 Jan 25, 2016 updated at 17:11:32 (UTC)
Goto Top
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.
Member: H41mSh1C0R
H41mSh1C0R Jan 25, 2016 at 17:20:08 (UTC)
Goto Top
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.
Member: H41mSh1C0R
H41mSh1C0R Jan 26, 2016 updated at 11:11:52 (UTC)
Goto Top
Zitat von @114757:

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!"  
	}