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

Losing multi-select when right click for context menu

7 Answers 601 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Chris Breymeyer
Top achievements
Rank 1
Chris Breymeyer asked on 10 Jan 2008, 09:03 PM
Hi,

I am using the Rad gridview for windows forms.  I have multiselect enabled and it mostly works like a charm (holding shift down and clicking with the mouse still does not select multiple rows).

However, when I use some other method to select multiple rows (holding the control key down for example) and I right click to bring up my context menu, all of the rows I had selected become unselected except for the actual row I right-clicked on.

Is this a known issue?  Is there a workaround for this problem?

Thanks,

John Reynolds

7 Answers, 1 is accepted

Sort by
0
Jack
Telerik team
answered on 11 Jan 2008, 09:02 AM
Hi John Reynolds,

Thank you for reporting this issue.

We managed to reproduce  it locally. We apologize for the caused inconvenience. We will address this issue in our upcoming release. Don't hesitate to contact us if you have other questions.

Kind regards,
Jack
the Telerik team

Instantly find answers to your questions at the new Telerik Support Center
0
kumar
Top achievements
Rank 1
answered on 09 Jul 2008, 07:20 PM
Is there any way in Q1 2008 release to get all selected rows ( multiselect), after right clicking on a row and opening context menu. I need to process all the rows depending on the context menu chosen. Currently after right click only one row remains selected (the one on which right-click was done).

Other queries:
1. Is there a way to have different column types in same column in different rows e.g. I dont want to show button in a column if the text in that is empty.
2. Is there a way to have linkColumn.
0
Jack
Telerik team
answered on 11 Jul 2008, 11:51 AM
Hi kumar,

Thank you for your questions.

Yes, there is a way to keep the selected rows selected after raising the context menu (FYI, we plan to address this usability issue in one of our upcoming releases). You can work around this by using a descendant class of RadGridView. Consider the following code snippet below:

public class MyGrid : RadGridView 
    List<GridViewRowInfo> savedSelectedRows = new List<GridViewRowInfo>(); 
 
    public override string ThemeClassName 
    { 
        get { return typeof(RadGridView).FullName; } 
        set { } 
    } 
 
    public List<GridViewRowInfo> SavedSelectedRows 
    { 
        get { return this.savedSelectedRows; } 
    } 
 
    protected override void OnMouseDown(MouseEventArgs e) 
    { 
        if (e.Button == MouseButtons.Right) 
        { 
            savedSelectedRows.Clear(); 
            foreach (GridViewRowInfo row in this.SelectedRows) 
            { 
                savedSelectedRows.Add(row); 
            } 
        } 
 
        base.OnMouseDown(e); 
    } 

Regarding your queries:

1. Use the following code snippet to show buttons only when there is data in the corresponding cell:

void radGridView1_CellFormatting(object sender, CellFormattingEventArgs e) 
    GridViewDataColumn column = e.CellElement.ColumnInfo as GridViewDataColumn; 
    if (column != null && column.FieldName == "Date"
    { 
        GridDataCellElement cell = (GridDataCellElement)e.CellElement; 
 
        if (cell.Children.Count == 0) 
        { 
            RadButtonElement button = new RadButtonElement(); 
            cell.Children.Add(button); 
            ApplyThemeToElement(button, "ControlDefault");  
        } 
 
        if (cell.Value == DBNull.Value || string.IsNullOrEmpty((string)cell.Value)) 
        { 
            cell.Children[0].Visibility = ElementVisibility.Hidden; 
        } 
        else 
        { 
            cell.Children[0].Visibility = ElementVisibility.Visible; 
            ((RadButtonElement)cell.Children[0]).Text = cell.Value.ToString(); 
        } 
        cell.Text = ""
    } 
 
private void ApplyThemeToElement(RadItem item, string themeName) 
    DefaultStyleBuilder builder = ThemeResolutionService.GetStyleSheetBuilder((RadControl)item.ElementTree.Control, item.GetThemeEffectiveType().FullName, string.Empty, themeName) 
                                  as DefaultStyleBuilder; 
 
    if (builder != null
        item.Style = new XmlStyleSheet(builder.Style).GetStyleSheet(); //clone because control might modify it later  
 

2. Currently RadGridView doesn't have a specialized hyperlink column, but it can be implemented by processing the CellFormatting event. Take a look at this forum post.

Please let me know if you need further assistance.
 

Sincerely yours,
Jack
the Telerik team

Instantly find answers to your questions at the new Telerik Support Center
0
Eric
Top achievements
Rank 1
answered on 29 Feb 2012, 12:38 AM
I've got 2012 Q1 and still having this problem ... namely,

  • right click will always change cell to mouse pointer
  • the context menu only shows on every other right-click

The suggested work around didn't work because I am not subclassing the grid control.  However, the following did work for me with regards to getting my context menu to always show up: 
  Private Sub gridView_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgsHandles gridView.MouseDown
 
            If e.Button = Windows.Forms.MouseButtons.Right Then
                m_contextMenu.Show(Me, e.Location)
            Else
                MyBase.OnMouseDown(e)
            End If
 
        End Sub

It still does change the cell location and also the selected row (if you move off the desired row)... but at least now the user can get at the context menu much easier. However, is there a work around to the right click changing the selection yet as it's now 2012 :)

0
Jack
Telerik team
answered on 02 Mar 2012, 03:03 PM
Hello Eric,

If I understand your question correctly, you want to display a context menu without changing the current cell location. The default RadGridView menu is context specific to the current cell and it can work correctly only when the clicked cell is current. However, you can change this behavior by using a custom context menu and overriding the OnMouseDown method in BaseGridBehavior. Consider the following sample:
this.radGridView1.GridBehavior = new CustomGridBehavior();
 
public class CustomGridBehavior : BaseGridBehavior
{
    public override bool OnMouseDown(MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            RadDropDownMenu menu = new RadDropDownMenu();
            menu.Items.Add(new RadMenuItem("Item 1"));
            menu.Items.Add(new RadMenuItem("Item 2"));
            menu.Items.Add(new RadMenuItem("Item 3"));
            menu.Show(GridControl.PointToScreen(e.Location));
            return true;
        }
        return base.OnMouseDown(e);
    }
}

I hope this helps.
 
Kind regards,
Jack
the Telerik team
RadControls for WinForms Q1'12 release is now live! Check out what's new or download a free trial >>
0
Aamir
Top achievements
Rank 1
answered on 29 Jul 2013, 06:32 AM
I have latest telerik WPF controls and I can still see same problem. Is issue mentioned in initial post is fixed ? 
0
Nikolay
Telerik team
answered on 31 Jul 2013, 12:23 PM
Hi Aamir,

Please note that the current forum thread concerns RadGridView for WinForms. As it seems that you are using RadControls for WPF (and RadGridView for WPF in particular), I would kindly ask you to address your WPF-related question in the appropriate WPF section. This will allow our community members interested in RadGridView for WPF to find your topic more easily.

Thank you for your understanding.

Regards,
Nikolay
Telerik
TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WINFORMS.
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
Tags
GridView
Asked by
Chris Breymeyer
Top achievements
Rank 1
Answers by
Jack
Telerik team
kumar
Top achievements
Rank 1
Eric
Top achievements
Rank 1
Aamir
Top achievements
Rank 1
Nikolay
Telerik team
Share this question
or