This is a migrated thread and some comments may be shown as answers.

Selecting rows/cells and clearing selection

9 Answers 265 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Daniel
Top achievements
Rank 1
Daniel asked on 02 Nov 2008, 11:55 AM
There is IsSelected property on cells and rows, but when I programically select row/cell, there is still one more selected (first row) which was there after grid initialization. I tried to deselect row by this, but with no result

 

if (radGridView1.CurrentRow != nullradGridView1.CurrentRow.IsSelected = false;

 

9 Answers, 1 is accepted

Sort by
0
Nick
Telerik team
answered on 04 Nov 2008, 08:57 AM
Hi Daniel,

Thank you for your question.
 
The confusion comes from the fact that there is a current row and selected rows which are visualized in the same way from the theme. There is always a current row and even if you set its IsSelected property to false it will still looks like selected, though technically it is not.

Please do not hesitate to contact me if you have further questions.

Best wishes,
Nick
the Telerik team

Check out Telerik Trainer, the state of the art learning tool for Telerik products.
0
Daniel
Top achievements
Rank 1
answered on 04 Jan 2009, 11:24 AM
Hi Nick, how am I supposed to clear selection then?
0
Nick
Telerik team
answered on 05 Jan 2009, 04:31 PM
Happy New Year, Daniel.

There is no way to do this, I am afraid. We are currently working on distinguishing between IsCurrent and IsSelected. I hope that will be able to provide this functionality in the second Service Pack, scheduled to be released this month.
 

 
Best wishes,
Nick
the Telerik team

Check out Telerik Trainer, the state of the art learning tool for Telerik products.
0
Daniel
Top achievements
Rank 1
answered on 29 Jan 2009, 07:25 PM
Is there any progress on this matter? I'm trying to do this within multi-column combo box when there is no item selected, but still without results. Thx

Daniel
0
Accepted
Nick
Telerik team
answered on 30 Jan 2009, 06:35 PM
Hello Daniel,

Thank you for your inquiry. I am happy to give you a positive answer. Since our latest release Q3 2008 SP2 the default theme uses slightly different colors for the selected rows and the current row. Do not hesitate to contact me back if you have more questions.
 
Regards,
Nick
the Telerik team

Check out Telerik Trainer, the state of the art learning tool for Telerik products.
0
Eric
Top achievements
Rank 1
answered on 02 Mar 2012, 05:28 PM
Ok, fast forward 3 years... I'm still having this problem.  Is it really true you still cannot change the selected cell programatically in a way that is clear to the user that the selection has actually changed?  I really need a work around.  To me this is a critical bug in the grid.  All I am trying to do is to allow a user to type and find the next matching text down the selected column.  I've been able to do that part if only to be hung up on this problem... old selected cell and row will not clear out (from the user perspective).  Here is the function.  The search part works great.  The new row is highlighted, but I cannot clear the old one. Also, the grid won't scroll to the new row (see comment about the row getting deleted if I call row.EnsureVisible()).  


Private Sub FindRow(match As String)
 
          Dim iCol As Integer
          Dim iStartRow As Integer
          If gridView.CurrentCell IsNot Nothing Then
              iCol = gridView.CurrentCell.ColumnIndex
              iStartRow = gridView.CurrentCell.RowIndex + 1
              If iStartRow = gridView.Rows.Count Then
                  Return  'at end already
              End If
 
              gridView.ClearSelection()
              gridView.Rows(0).IsCurrent = False
              gridView.CurrentCell.IsCurrent = False
              'anything else I need to do here???  I can't get the selected row to highlight
 
          End If
 
          For iRow As Integer = iStartRow To gridView.Rows.Count - 1
              Dim row As GridViewRowInfo = gridView.Rows(iRow)
              If row.Cells(iCol).Value IsNot Nothing _
              AndAlso row.Cells(iCol).Value.ToString().StartsWith(match) Then
                  gridView.ClearSelection()
                  row.IsCurrent = True
                  row.IsSelected = True
                  row.Cells(iCol).IsSelected = True
                  'row.EnsureVisible()        'DON'T call this or it eats the row!!!
                  Return
              End If
          Next
 
      End Sub


I have a video I can provide to show you the behavior.
0
Svett
Telerik team
answered on 05 Mar 2012, 05:56 PM
Hi Eric,

You can use the following code snippet to achieve the desired behavior:

Private Sub FindRow(match As String)
    Dim currentRow As GridViewDataRowInfo = TryCast(Me.radGridView1.CurrentRow, GridViewDataRowInfo)
    Dim columnName As String = If(Me.radGridView1.CurrentColumn IsNot Nothing, Me.radGridView1.CurrentColumn.Name, Nothing)
 
    If String.IsNullOrEmpty(columnName) Then
        Return
    End If
 
    If currentRow IsNot Nothing AndAlso currentRow.Index = Me.radGridView1.ChildRows.Count - 1 Then
        Return
    End If
 
    Me.radGridView1.CurrentRow = Nothing
 
    For Each row As GridViewRowInfo In Me.radGridView1.ChildRows
        Dim value As Object = row.Cells(columnName).Value
 
        If value IsNot Nothing AndAlso Convert.ToString(value).StartsWith(match) Then
            Me.radGridView1.CurrentRow = row
            Exit For
        End If
    Next
End Sub

Notice that the code snippet above is tested in Q1 2011 (2012.1.12.215). If the proposed solution does not fit your requirements, could you send us a sample project by opening new support ticket? This will help us to investigate your scenario in depth. Kind regards,
Svett
the Telerik team
RadControls for WinForms Q1'12 release is now live! Check out what's new or download a free trial >>
0
Eric
Top achievements
Rank 1
answered on 05 Mar 2012, 08:36 PM
Thank you, this worked!  A couple of items...

1. Can you please enter a bug on the fact that the line
row.IsCurrent
... doesn't work?

2. This solution works only until the user resorts the table using the header resorting.  Basically, the indexes of the rows are based on the original sort and the visual sorting is apparently stored somewhere else.  How can I traverse the visible cells regardless of how the user arrived at it?  This would be the same problem with using the row filtering as well I imagine.

Update: I found the problem with item 2... the solution should be modified to search only the child rows.  Per http://www.telerik.com/help/winforms/gridview-rows-rows-vs-childrows.html the childRows collection contain the UI visible version of the data where as the .Rows is the original dataSource.  


Eric
0
Svett
Telerik team
answered on 08 Mar 2012, 03:59 PM
Hello Eric,

I am glad to hear that you have managed to resolve item no. 2. I am not able to reproduce the issue of setting the current row by using the IsCurrent property. I modified the FindRow method to use the property and everything works well for me:

Private Sub FindRow(match As String)
    Dim currentRow As GridViewDataRowInfo = TryCast(Me.radGridView1.CurrentRow, GridViewDataRowInfo)
    Dim columnName As String = If(Me.radGridView1.CurrentColumn IsNot Nothing, Me.radGridView1.CurrentColumn.Name, Nothing)
 
    If String.IsNullOrEmpty(columnName) Then
        Return
    End If
 
    If currentRow IsNot Nothing AndAlso currentRow.Index = Me.radGridView1.ChildRows.Count - 1 Then
        Return
    End If
 
    If currentRow IsNot Nothing Then
        currentRow.IsCurrent = False
    End If
 
    For Each row As GridViewRowInfo In Me.radGridView1.ChildRows
        Dim value As Object = row.Cells(columnName).Value
 
        If value IsNot Nothing AndAlso Convert.ToString(value).StartsWith(match) Then
            row.IsCurrent = True
            Exit For
        End If
    Next
End Sub

Could you open a support ticket and enclose a sample project where the issue occurs? This will allow us to assist you further.

All the best,
Svett
the Telerik team
RadControls for WinForms Q1'12 release is now live! Check out what's new or download a free trial >>
Tags
GridView
Asked by
Daniel
Top achievements
Rank 1
Answers by
Nick
Telerik team
Daniel
Top achievements
Rank 1
Eric
Top achievements
Rank 1
Svett
Telerik team
Share this question
or