We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy. Image for the cookie policy date

Mulitple cell selection

How can i tell when the user clicks another cell while holding down the ctrl key to select multiple cells. I want to be able to see that they have clicked another cell but more so to see that they click another cell in a different column. So if they click row 1 in column one and then hold down the ctrl key and click the cell in row1, column2 i want to do something knowing they clicked multiple cells in DIFF columns. Thanks

12 Replies

AD Administrator Syncfusion Team January 28, 2004 06:37 PM UTC

If I understand what you want, I think you can do it by subscribing to the CellClick event.
Private Sub gridControl1_CellClick(sender As Object, e As GridCellClickEventArgs)
   ''check for ctl+click
   If(Control.ModifierKeys And Keys.Control) <> 0 Then
      
      Dim rangeList As GridRangeInfoList
      If Me.gridControl1.Selections.GetSelectedRanges(rangeList, False) Then
         Dim clickedCell As GridRangeInfo = Me.gridControl1.CurrentCell.RangeInfo
         Dim clickedCellCol As GridRangeInfo = GridRangeInfo.Col(Me.gridControl1.CurrentCell.ColIndex)
         Dim newCol As Boolean = True
         Dim range As GridRangeInfo
         For Each range In  rangeList
            If range <> clickedCell And range.IntersectsWith(clickedCellCol) Then
               newCol = False
               Exit ForEach
            End If
         Next range
         If newCol Then
            Console.WriteLine("ctl+click into new column")
         End If
      End If
   End If 
End Sub ''gridControl1_CellClick


PB Philip Bishop January 29, 2004 11:34 AM UTC

Clay, First thanx for getting back to us so fast. The code you sent kinda sorta works. If i click row one column one cell and then hold the ctrl key and click row one column 2 it works fine. If i keep the ctrl key down and click row 2 column 2 then its like your code u sent starts over. We are trying to disable a group box and its contents based on whether or not they click a range in one column which is ok versus a range of any other type which isnt and in turn should disable the group box. In the selection changing even in this sample u will see that we do this if they grab a range with the mouse and it works fine. Your code seems to be ok until they click multiple cells in another column after the orginal column cell was clicked. The only thing we werent for sure on was the one line of code u had that wouldnt work in VB. It was this line If range <> clickedCell And range.IntersectsWith(clickedCellCol) Then the <> wouldnt work in vb. we would get the message use the IS operator when comparing 2 reference types...so we coded it like this but we are not for sure if its right If Not range.Equals(clickedCell) And range.IntersectsWith(clickedCellCol) Then I am attaching a sample below. click the first cell in row one column one. then hold down the ctrl key and click row one column two and notice the group box disable..still holding down the ctrl key now click column 2 row 2 and notice the gray box re enable itself. Thats what we are trying to prevent because its still outside the cell. That is where its like ur code is starting over because its now in another column like it forgot the column one row one was clicked cellclick_3999.zip


AD Administrator Syncfusion Team January 29, 2004 12:30 PM UTC

I think the code is indentifying when a new column is clicked. In your senario of ctl+clicking 1,2 and then 2,2. Clicking 2,2 does not mark a new column, does it? And if you step through the code, the bool newCol is false in this case which is correct since it is not a new column. But you have this code: If newCol Then GroupBox1.Enabled = False Else GroupBox1.Enabled = True End If So, in this case when it is not a new column, you explicitly enable the groupbox which is what you see. So, the question is: Exactly when do you want to enable the groupbox afer disabling it? It is not when you ctl-click into the same column which is what your code is dointg now, is it? Once you decide what this answer is, I think you would move the GroupBox1.Enabled = True to some other position in your code to implement what you need.


PB Philip Bishop January 29, 2004 05:49 PM UTC

Ok so i see what ur saying and I think I may of figured out where to set that groupbox to enabled. When i make that work however it messes with the code i have in the selectionchanging event to try to and grab when someone selects a range with the mouse. Maybe I am making this to hard. Let me ask this another way. Whats the easiest way that if someone clicks any cell that isnt in the column that the first cell was clicked in it disables that group box whether its a ctrl clicking or shift key or grabbing a range with ur mouse. they can do a range in one column and thats ok. so anytime they click out of the original column i want to disable the group box and anytime it gets reset where only one cell is selected it gets enabled. let me know


AD Administrator Syncfusion Team January 29, 2004 06:19 PM UTC

I think you can do all this in the SelectionChanged event. cellclick_6346.zip


PB Philip Bishop January 30, 2004 11:00 AM UTC

Dude, do you ever sleep. HAHA. We swear you have a laptop with you 24/7 answering this forum. Thanks for the code, it does exactly what we wanted. You are the man!!


JT James Tran September 20, 2004 06:22 PM UTC

Clay, Can I get this code in C#? I am trying to find out which rows (0-n) are currently selected by the user via CTRL+Click. >If I understand what you want, I think you can do it by subscribing to the CellClick event. >
>Private Sub gridControl1_CellClick(sender As Object, e As GridCellClickEventArgs)
>   ''check for ctl+click
>   If(Control.ModifierKeys And Keys.Control) <> 0 Then
>      
>      Dim rangeList As GridRangeInfoList
>      If Me.gridControl1.Selections.GetSelectedRanges(rangeList, False) Then
>         Dim clickedCell As GridRangeInfo = Me.gridControl1.CurrentCell.RangeInfo
>         Dim clickedCellCol As GridRangeInfo = GridRangeInfo.Col(Me.gridControl1.CurrentCell.ColIndex)
>         Dim newCol As Boolean = True
>         Dim range As GridRangeInfo
>         For Each range In  rangeList
>            If range <> clickedCell And range.IntersectsWith(clickedCellCol) Then
>               newCol = False
>               Exit ForEach
>            End If
>         Next range
>         If newCol Then
>            Console.WriteLine("ctl+click into new column")
>         End If
>      End If
>   End If 
>End Sub ''gridControl1_CellClick
>


AD Administrator Syncfusion Team September 20, 2004 10:09 PM UTC

If you want to iterate through selected rows, you should look at this KB. http://www.syncfusion.com/Support/article.aspx?id=564 Here is the previous sample in C#. cellclick_5301.zip


AD Administrator Syncfusion Team September 23, 2004 03:35 PM UTC

Thanks...this will work. However, in my case, the first column is an identifier and is not clickable by the user. Since the row is not clickable, the SelectionChanged event never gets called. What I would like instead is if the user clicks on any cell (other than the cells in the first column which are not clickable), that is equivalent to selecting the whole row. Now, they would hold CTRL and click on a cell in another row. This action would result in the selection of two rows. How can I get a callback on this action and find out which two rows were selected?


AD Administrator Syncfusion Team September 23, 2004 06:25 PM UTC

Will setting the grid.ListBoxSelectionMode = SelectionMode.MultiExtended do what you want? It will select the whole row whenever you click in the row, and you can use ctl+Click to select additional rows.


AD Administrator Syncfusion Team September 24, 2004 12:30 PM UTC

Unfortnately, this did not work. I''m not getting the callback when I click on a row. I have attached the example project with a break point in the callback. Click on multiple rows and the callback will not get called. Thanks. >Will setting the grid.ListBoxSelectionMode = SelectionMode.MultiExtended do what you want? > >It will select the whole row whenever you click in the row, and you can use ctl+Click to select additional rows. CS_2203.zip


AD Administrator Syncfusion Team September 24, 2004 03:30 PM UTC

Hi Jane, I think you only need to add this line: gridControl1.SelectionChanged += new GridSelectionChangedEventHandler(gridControl1_SelectionChanged); Then you handler will be called. In the sample you sent the event handler was not wired up at all. Stefan

Loader.
Live Chat Icon For mobile
Up arrow icon