George Shepherd's Windows Forms FAQ
Questions and answers in this FAQ have been collected from newsgroup posts, various mailing lists and the employees of Syncfusion.

5.41 How can I make my DataGrid support a single select mode, and not the default multiselect mode


One way to do this is to derive a DataGrid, override its OnMouseDown and OnMouseMove methods. In the OnMouseDown, handle selecting and unselecting in your code without calling the base class if the click is on the header. In the OnMouseMove, don't call the baseclass to avoid dragging selections. Below is a code snippet for a sample derived DataGrid. You can download a full project (C#, VB).

public class MyDataGrid : DataGrid
{
     private int oldSelectedRow = -1;
     
     protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e)
     {
          //don't call the base class if left mouse down
          if(e.Button != MouseButtons.Left)
               base.OnMouseMove(e);
     }

     protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
     {
          //don't call the base class if in header
          DataGrid.HitTestInfo hti = this.HitTest(new Point(e.X, e.Y));
          if(hti.Type == DataGrid.HitTestType.Cell)
          {
               if(oldSelectedRow > -1)
                    this.UnSelect(oldSelectedRow);
               oldSelectedRow = -1;
               base.OnMouseDown(e);
          }
          else if(hti.Type == DataGrid.HitTestType.RowHeader)
          {
               if(oldSelectedRow > -1)
                    this.UnSelect(oldSelectedRow);
               if((Control.ModifierKeys & Keys.Shift) == 0)
                    base.OnMouseDown(e);
               else
                    this.CurrentCell = new DataGridCell(hti.Row, hti.Column);
               this.Select(hti.Row);
               oldSelectedRow = hti.Row;
          }
     }
}



Windows Forms-Datagrid

© 2001-2009 Copyright Syncfusion Inc. All rights reserved.  |  Privacy Policy  |  Contact  |  Sitemap