Selektierte DataGridView Zellen zwischenspeichern
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.
-
-
Hallo,
mann kann ganz einfach eine List(of Point) dafür nehmen in der die CellAdresses gespeichert sind.
VB.NET-Quellcode
- Dim liste As New List(Of Point)
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- liste.Clear()
- For i As Integer = 0 To DataGridView1.Rows.Count - 1
- For j As Integer = 0 To DataGridView1.ColumnCount - 1
- If DataGridView1.Rows(i).Cells(j).Selected Then
- liste.Add(New Point(i, j))
- End If
- Next
- Next
- End Sub
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- DataGridView1.ClearSelection()
- For i As Integer = 0 To liste.Count - 1
- DataGridView1.Rows(liste(i).X).Cells(liste(i).Y).Selected = True
- Next
- End Sub
mfG
Derfuhr -
-
Lightsource schrieb:
später wieder zurück kopieren.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Hab´s mal versucht, ist zum einlesen ohne schleife möglich, aber zum erneuten setzen braucht man wohl doch eine.
VB.NET-Quellcode
- Dim asd As DataGridViewSelectedCellCollection
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- DataGridView1.ClearSelection()
- For Each c As DataGridViewCell In asd
- DataGridView1.Rows(c.RowIndex).Cells(c.ColumnIndex).Selected = True
- Next
- End Sub
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- asd = DataGridView1.SelectedCells
- End Sub
mfG
Derfuhr -
-
-
-
-
-
-
-
welchen
c.RowIndex as DataGridViewCell
?
also wenn du sowas iwo hast - es ist Unfug. Weil welchen Datentyp hat c.RowIndex? -
Ich weiß schon, hatte mich wohl missverständlich ausgedrückt
For Each c As DataGridViewCell In asd
DataGridView1.Rows(c.RowIndex).Cells(c.ColumnIndex).Selected = True
Next
hier sollte es aber schon funktionieren, dass man den RowIndex aus c erhalten kann.
klappt aber nicht
Ich brauche eine Abfrage auf Plausibilität, weil es möglich ist, dass inzwischen das DataGridView
weniger Zeilen oder Spalten hat, als vor der Selektion. Dabei ist mir aufgefallen, dass c.RowIndex im Gegensatz
zu c.ColumnIndex immer auf -1 stand obwohl der Count auf meinetwegen 10 war.
Oder hab eich etwas übersehen? -
Lightsource schrieb:
weniger Zeilen oder Spalten hat, als vor der Selektion
Hallo,
Sobald sich die CellAdresses geändert hat bekommt man Rowindex=-1 Column = 0 zurück aus der Collection, selbst wenn du eine List of Point nimmst würde die alte Celladresse gespeichert, dann wären also die falschen Cell´s wieder selektiert.
(z.B. alter rowindex 2, eine Zeile drüber entfernen, dann muss der rowindex 1 sein. Mit den Colums verhält es sich auch so.)
mfG
Derfuhr -
Ich wollte ja auch keine Zellen mehr selektieren sobald sich etwas an der Anzahl geändert hat.
Bei mir ist es aber so, dass wenn ich mit For Each durch die gespeicherten Zellenadressen gehe,
zwar verschiedene Werte für die Spalten bekomme, aber der RowIndex immer auf -1
stehen bleibt. Das verstehe ich nicht.
in der MSDN steht:
Wenn die RowIndex-Eigenschaft -1 zurückgibt, stellt die Zelle entweder einen Spaltenheader dar, oder die Zeile der Zelle ist freigegeben.
Spalten header habe ich aber nicht selektiert. Und freigegeben weiß ich jetzt nicht was damit in meinem Fall gemeint sein kann.
Immerhin arbeite ich doch mit einer Kopie der Selektion, oder?
Wenn ich einen Haltepunkt beim IF setze kann ich bei jedem Schleifendurchlauf sehen, wie
der ColumnIndex hoch läuft, während der RowIndex immer auf -1 bleibt.
VB.NET-Quellcode
- Public Class class_ZellenHandel
- Private selCells As DataGridViewSelectedCellCollection
- Sub SaveSelection(ByVal DGV As DataGridView)
- selCells = DGV.SelectedCells
- End Sub
- Sub SetSelection(ByVal DGV As DataGridView)
- DGV.ClearSelection()
- Dim c As DataGridViewCell = Nothing
- For Each c In selCells
- If c.ColumnIndex > 0 AndAlso c.ColumnIndex <= DGV.ColumnCount - 1 AndAlso c.RowIndex > 0 AndAlso c.RowIndex <= DGV.RowCount - 1 Then
- c.Selected = True
- End If
- Next
- End Sub
- End Class
-
Ich habe mal die Funktionen zuhause mit VB2010 express gestestet.
Zuhause klappt es!
An was kann so etwas liegen?
Kann jemand mit VB2008-pro mal testen, ob es bei ihm funktioniert?
Eine Form mit DGV1=DataGridView1, Button1, Button2
VB.NET-Quellcode
- Public Class Form1
- Dim n As Integer
- Dim asd As DataGridViewSelectedCellCollection
- Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- For Me.n = 0 To 10
- DGV1.Rows.Add()
- For i As Integer = 0 To DGV1.ColumnCount - 1
- DGV1(i, n).Value = (i * n).ToString
- Next
- Next n
- End Sub
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- DGV1.ClearSelection()
- For Each c As DataGridViewCell In asd
- If c.ColumnIndex > 0 AndAlso c.ColumnIndex <= DGV1.ColumnCount - 1 AndAlso c.RowIndex > 0 AndAlso c.RowIndex <= DGV1.RowCount - 1 Then
- Debug.Print(c.RowIndex.ToString)
- c.Selected = True
- End If
- Next
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- asd = DGV1.SelectedCells
- End Sub
- End Class
-
-
Danke fürs Testen.
Das ist eigenartig. Da muss ich mir wohl mein VB irgendwie zerschossem haben.
Vor allem auch darum, weil Debuggen innerhalb der Each Schleife nicht geht.
Ich werde noch andere Frameworks testen, aber das wäre auch komisch,
wenn es daran läge.
Momentan bin ich auf einem 64er System mit Framework 3.5 Windows 7 Any-CPU -
Lightsource schrieb:
Da muss ich mir wohl mein VB irgendwie zerschossem haben.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
-
Tags
-
Ähnliche Themen
-
Tobi7996 - - Sonstige Problemstellungen
-
Selektierte Zeile im Datagridview festlegen
flightgear91 - - Sonstige Problemstellungen
-
5 Benutzer haben hier geschrieben
- Lightsource (11)
- ErfinderDesRades (8)
- Gast (3)
- VB1963 (2)
- RodFromGermany (2)