Announcement

Collapse
No announcement yet.

DataGridView Zeilenauswahl

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DataGridView Zeilenauswahl

    Hallo zusammen,
    ich möchte eine Tabelle mit Daten aus einer Datenbank füllen. Als erste Spalte möchte ich ein Feld haben, wo ich explizit eine Zeile markieren kann. Es darf immer nur eine Zeile markiert sein.

    Es gibt die Felder ID und Beschreibung in der Datenbank. Um ein entsprechendes „Markierungsfeld“ in die Tabelle zu bekommen bringe ich in den Select eine „Pseudospalte“ Anzeige.


    Code:
    SELECT CONVERT(BIT, 0) AS Anzeige, ID, Beschreibung FROM Tabelle ORDER BY ID
    Das funktioniert auch ganz gut. Nun Das Problem immer nur eine Spalte zu markieren:


    Code:
    Private Sub MyDtGrdView_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyDtGrdView.Click
        Dim MyGrid As DataGridView = CType(sender, DataGridView)
        Dim MyRow As Integer = MyGrid.CurrentCell.RowIndex
    
        For Each Row As DataGridViewRow In MyGrid.Rows
          Row.Cells("Anzeige").Value = False
        Next
        MyGrid.Rows(MyRow).Cells("Anzeige").Value = True
      End Sub

    Das sieht auch noch ganz gut aus. Aber jetzt mein Problem:

    Wenn ich die Zeile auslesen möchte in der die Markierung ist funktioniert das nicht.
    Wenn ich z.B. erst die Zeile 5 markiere und dann wieder in Zeile 5 klicke um die Markierung wieder zu löschen ( also keine Zeile mehr markierte ist) bekomme ich mit folgendem Aufruf immer noch einen Wert für Zeile 5 Markiert:


    Code:
    For Each Row As DataGridViewRow In MyDtGrdView.Rows
          If CType(Row.Cells("Anzeige").Value, Boolean) = True Then
            MyIDV = CType(MyDtGrdView.Rows(Row.Index).Cells("ID").Value, Integer)
            Exit For
          End If
        Next
    Was mache ich Falsch ? Oder geht das noch eleganter ?

    Bin für jede Idee dankbar...

  • #2
    Hallo,

    Welche Einstellungen hast Du den der DataGridView mitgegeben, wenn ich bei mir eine Zeile ein zweites Mal anklick bleibt die markiert.

    Die markierte Zeile bekommt man auch mit [highlight=vbnet]If MyGrid.SelectedRows.Count > 0 Then
    MyIDV = MyGrid.SelectedRows(0).Cells("ID").Value
    End If
    [/highlight]

    Gruß Womble

    Comment


    • #3
      Hallo,
      ich hatte das Problem vielleicht nicht ganz klar beschrieben.

      Durch meine "PseudoSpalte" Anzeige wollte ich erreichen, dass ich eine Spalte im DataGridView bekommen welche Kontrollfelder beinhaltet. Beim ersten Aufruf sollten diese den Wert Unchecked haben.

      Beim Klicken in eine Zeile sollte der Wert der in der Spalte Anzeige auf Checked gesetzt werden.

      Es sollte immer nur eine Zeile mit Checked markiert sein.

      Ich habs aber mitlerweile hinbekommen:

      [highlight=vbnet]
      Private Sub MyDtGrdView_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles MyDtGrdView.CellClick
      Dim MyGrid As DataGridView = CType(sender, DataGridView)
      If MyGrid.IsCurrentCellInEditMode Then
      MyGrid.EndEdit()
      End If

      Dim MyRow As Integer = MyGrid.CurrentCell.RowIndex
      Dim MyVal As CheckState = CType(CType(MyGrid.Rows(MyRow).Cells("Anzeige").Va lue, Short) + 1, CheckState)

      For Each Row As DataGridViewRow In MyGrid.Rows
      Row.Cells("Anzeige").Value = CheckState.Unchecked
      Next
      MyGrid.Rows(MyRow).Cells("Anzeige").Value = CType(MyVal, CheckState)

      End Sub
      [/highlight]

      Comment

      Working...
      X