Announcement

Collapse
No announcement yet.

Nur bestimme Zellen im Datagridview markieren

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

  • Nur bestimme Zellen im Datagridview markieren

    Ich habe ein Datagridview mit einigen Spalten. Spalte1 hat nur einen farbigen Hintergrund, um den Status anzuzeigen.

    Mein Datagridview ist zur Zeit auf FullRowSelect eingestellt. Selektiert man jetzt eine Zeile, wird auch die Spalte1 selektiert und blau dargestellt, sodass man den Status nicht mehr ablesen kann.

    Gibt es eine Möglichkeit, das ich in einer Zeile nur die Spalte 2-x markieren kann?

  • #2
    Selber die Selektion zeichnen.

    http://msdn.microsoft.com/de-de/library/85kxk29c.aspx

    Comment


    • #3
      Danke.

      Flimmert zwar etwas beim Wechsel, am es funktioniert.

      Comment


      • #4
        Besteht vielleicht noch eine andere Möglichkeit? So wie ich es jetzt habe, behält die Farbspalte immer den alten Wert beim erstmaligen Befüllen. Erst wenn ich einmal die Selektion wechsel, ist es korrekt.

        Comment


        • #5
          Wenn du schon am selber zeichnen bist zeichnest du doch die Farbspalte auch gleich selber mit oder?

          Comment


          • #6
            Habe ich gerade probiert, aber irgendwie wird der Status nur in der selektierten Zeile farbig dargestellt.

            Code:
            Private Sub dgv_RowPrePaint(sender As Object, e As System.Windows.Forms.DataGridViewRowPrePaintEventArgs) Handles dgv.RowPrePaint
                    Try
                        If (e.State And DataGridViewElementStates.Selected) = DataGridViewElementStates.Selected Then
            
                            Dim AbmessungenSelektion As New Rectangle(dgv.Columns("StatusFarbe").Width, e.RowBounds.Top, dgv.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - _
                                                           dgv.HorizontalScrollingOffset + 1, e.RowBounds.Height)
            
                            Dim HintergrundSelektion As New System.Drawing.SolidBrush(dgv.DefaultCellStyle.SelectionBackColor)
            
                            Try
                                e.Graphics.FillRectangle(HintergrundSelektion, AbmessungenSelektion)
                            Finally
                                HintergrundSelektion.Dispose()
                            End Try
                        End If
            
                        Dim AbmessungenStatus As New Rectangle(0, e.RowBounds.Top, dgv.Columns("StatusFarbe").Width, e.RowBounds.Height)
            
                        Dim HintergrundStatus As New System.Drawing.SolidBrush(Color.Blue)
            
                        Try
                            e.Graphics.FillRectangle(HintergrundStatus, AbmessungenStatus)
                        Finally
                            HintergrundStatus.Dispose()
                        End Try
            
                    Catch ex As Exception
                        lFehlermeldung.Text = ex.Message
                        lFehlermeldung.ToolTipText = ex.StackTrace
                    End Try
                End Sub
            Zuletzt editiert von VBler; 25.03.2013, 16:28.

            Comment


            • #7
              Habe es jetzt so hinbekommen.

              Code:
              Private Sub dgv_CellPainting(sender As Object, e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles dgv.CellPainting
              	If e.ColumnIndex = 1 And e.RowIndex >= 0 Then
              		Dim Farbe As String = fStatusFarbcode(dgv.Rows(e.RowIndex).Cells("Status").Value)
              		e.Graphics.FillRectangle(New SolidBrush(Drawing.ColorTranslator.FromHtml(Farbe)), e.CellBounds.Left, e.CellBounds.Top - 1, e.CellBounds.Width, e.CellBounds.Height + 1)
              		e.Handled = True
              	End If
              End Sub

              Comment

              Working...
              X