Alex's Weblog

Weblog di Ermanno Goletto (Codename Alex - A Learning EXperience)
posts - 438, comments - 4214, trackbacks - 294

My Links

News

Il blog è stato
trasferito al
 seguente link:


DevAdmin Blog

Add my blog to Live

Foto

Curriculum Vitae


Il contenuto di questo blog e di ciascun post viene fornito “così come é”, senza garanzie, e non conferisce alcun diritto. Questo blog riporta il mio personale pensiero che non riflette necessariamente il pensiero del mio datore di lavoro.

Logo Creative Commons Deed


Logo MCTS

Logo MCSA

Logo MCP

Logo Microsoft Certified Business Management Solutions Professional

Microsoft Certified Business Management Solutions Specialist


Logo UGIdotNET UGIdotNET Contributor


Logo UGISS UGISS Contributor


Logo SysAdmin.it SysAdmin.it Staff


Article Categories

Archives

Post Categories

Blogs

Database

Development

Friends

IT

Knowledge Base

Links

MBS

MCP

MVP Sites

User Groups

Virtualization

DataGrid Single Selection

Come molti di voi sapranno per far sì che sul DataGrid si possa selezionare una sola riga si ricorre spesso alla soluzione reperibile su Syncfusion.com di cui riporto di seguito il codice:

Public Class MyDataGrid
   Inherits DataGrid

   Private oldSelectedRow As Integer

   Protected Overloads Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
     
 'don't call the base class if left mouse down
       If (e.Button <> MouseButtons.Left) Then
          MyBase.OnMouseMove(e)
       End If
   End Sub

   Protected Overloads Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
      'don't call the base class if in header
     
Dim hti As DataGrid.HitTestInfo
      hti =
Me.HitTest(New Point(e.X, e.Y))

     If (hti.Type = DataGrid.HitTestType.Cell) Then
       
If (oldSelectedRow > -(1)) Then
          
Me.UnSelect(oldSelectedRow)
       
End If

           oldSelectedRow = -(1)
           MyBase.OnMouseDown(e)
     Else

        If (hti.Type = DataGrid.HitTestType.RowHeader) Then
          
If (oldSelectedRow > -(1)) Then
             
Me.UnSelect(oldSelectedRow)
          
End If

           If ((Control.ModifierKeys And Keys.Shift) = 0) Then
             
MyBase.OnMouseDown(e)
          
Else
             
Me.CurrentCell = New DataGridCell(hti.Row, hti.Column)
           End If

           Me.Select(hti.Row)
           oldSelectedRow = hti.Row
       End If
     End If

   End Sub

End Class

Ciò però non è sufficiente infatti se l'utente preme la combinazione di tasti Ctrl+A seleziona tutte le righe.

Bisogna quindi aggiungere il seguente codice:

Protected Overrides Function ProcessDialogKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean

   If keyData = (Windows.Forms.Keys.Control Or Windows.Forms.Keys.A) Then Return True

   Return MyBase.ProcessDialogKey(keyData)

End Function

Print | posted on giovedì 30 settembre 2004 22:15 | Filed Under [ Code & Snippet .NET Framework ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET