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. 
| 
PublicClass 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:
| 
PublicClass 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
 EndClass | 
Somit hat der Entwickler ein DataGrid, in dem die Spaltenbreite und die Zeilenhöhe nicht mehr verändert werden kann.