DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Rene Paschold Artikel Drucken
        
Spaltenbreite und Zeilenhöhe im DataGrid fixieren

In den Newsgroups wird zur Zeit öffters die Frage gestellt wie man in einem Windows DataGrid die Zeilenhöhe und die Spaltenbreite fixieren kann, so dass der Anwender diese nicht mehr verändern kann. Hier sucht der Entwickler vergeblich nach ein Eigenschaft RowResize=False oder ähnliches.

Der moment einzige Weg sowas zu realisieren, ist ein eigenes DataGrid mit zwei überschriebenen Methoden zu erstellen. Als Basisklasse diehnt natürlich das normale DataGrid da ja nur die Breite und Höhe einer Zelle fixieren werden soll.

Als erstes erstellt man eine Klasse MyDataGrid die von System.Windows.Forms.DataGrid erbt.

Public Class MP3DataGrid
  Inherits System.Windows.Forms.DataGrid
End Class

Darin erstellt man dann zwei Methoden die die Basismethode überschreiben:

Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
End Sub

Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
End Sub

Da das DataGrid keine Möglichkeit bietet ein Event zu feuern wenn die Breite einer Spalte bzw. die Höhe einer Zeile verändert wird, muss manuell eingegriffen werden. Beide Methoden werden mit fast identischem Code überschrieben:

Dim hti As DataGrid.HitTestInfo = Me.HitTest(New Point(e.X, e.Y))

If (hti.Type = DataGrid.HitTestType.ColumnResize Or _
  hti.Type = DataGrid.HitTestType.RowResize) Then
 
Return
End If

Als erstes wird eine Variable hti erzeugt. Diese Variable bekommt die aktuelle Position welche durch einen Klick auf das DataGrid geliefert wird.

Mit hti.Type rufen wir den Teil des DataGrids ab, auf den geklickt wurde. Wenn jetzt auf das DataGrid geklickt wird um die Spaltenbreite zu verändern, dann wird kein Ergebnis zurück gegeben. Das gleich gilt auch für die Zeilenhöhe.

Am Ende der beiden Methoden wird dann noch die Basismethode aufgerufen. Hier der vollständige Code:

Public Class MyDataGrid
  Inherits DataGrid

  Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)

    Dim hti As DataGrid.HitTestInfo = Me.HitTest(New Point(e.X, e.Y))

    If (hti.Type = DataGrid.HitTestType.ColumnResize Or _
      hti.Type = DataGrid.HitTestType.RowResize) Then
     
Return
    End If

    MyBase.OnMouseMove(e)

  End Sub

  Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)

    Dim hti As DataGrid.HitTestInfo = Me.HitTest(New Point(e.X, e.Y))

    If (hti.Type = DataGrid.HitTestType.ColumnResize Or _
      hti.Type = DataGrid.HitTestType.RowResize) Then
     
Return
    End If

    MyBase.OnMouseDown(e)

  End Sub

End Class

Somit hat der Entwickler ein DataGrid, in dem die Spaltenbreite und die Zeilenhöhe nicht mehr verändert werden kann.


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 03.02.2004
  Gültig bis: 03.05.2004
7 Ratings
Bewertung: 97,1%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG