When I select several rows
radGridView1.MasterGridViewTemplate.SelectedRows.Count shows the correct number of selected rows. But if grid is sorted sometemes it shows the correct number, sometimes 1, sometimes 0. I chet in event on context menu click. So sometimes menu works on correct rows, sometime on one of seleted, sometimes does nothing
Thank you
Lily.
10 Answers, 1 is accepted

Hope you're well.
I'm afraid I haven't been able to replicate your issue. I have included a sample below where multiselection is on and the count is provided by a context menu.
Designer File
namespace
RadControlsWinFormsApp1
{
partial
class
Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private
System.ComponentModel.IContainer components;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected
override
void
Dispose(
bool
disposing)
{
if
(disposing && (components !=
null
))
{
components.Dispose();
}
base
.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private
void
InitializeComponent()
{
this
.radGridView1 =
new
Telerik.WinControls.UI.RadGridView();
((System.ComponentModel.ISupportInitialize)(
this
.radGridView1)).BeginInit();
this
.SuspendLayout();
//
// radGridView1
//
this
.radGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
this
.radGridView1.Location =
new
System.Drawing.Point(0, 0);
//
// radGridView1
//
this
.radGridView1.MasterTemplate.MultiSelect =
true
;
this
.radGridView1.Name =
"radGridView1"
;
this
.radGridView1.Size =
new
System.Drawing.Size(387, 381);
this
.radGridView1.TabIndex = 0;
this
.radGridView1.Text =
"radGridView1"
;
this
.radGridView1.ContextMenuOpening +=
new
Telerik.WinControls.UI.ContextMenuOpeningEventHandler(
this
.radGridView1_ContextMenuOpening);
//
// Form1
//
this
.AutoScaleDimensions =
new
System.Drawing.SizeF(6F, 13F);
this
.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this
.ClientSize =
new
System.Drawing.Size(387, 381);
this
.Controls.Add(
this
.radGridView1);
this
.Name =
"Form1"
;
this
.Text =
"Form1"
;
this
.Load +=
new
System.EventHandler(
this
.Form1_Load);
((System.ComponentModel.ISupportInitialize)(
this
.radGridView1)).EndInit();
this
.ResumeLayout(
false
);
}
#endregion
private
Telerik.WinControls.UI.RadGridView radGridView1;
}
}
Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Windows.Forms;
using
Telerik.WinControls.UI;
namespace
RadControlsWinFormsApp1
{
public
partial
class
Form1 : Form
{
public
Form1()
{
InitializeComponent();
}
private
void
Form1_Load(
object
sender, EventArgs e)
{
this
.radGridView1.Columns.Add(
new
GridViewTextBoxColumn(
"A"
));
this
.radGridView1.Columns.Add(
new
GridViewTextBoxColumn(
"B"
));
this
.radGridView1.Rows.Add(
"A1"
,
"B1"
);
this
.radGridView1.Rows.Add(
"A2"
,
"B2"
);
this
.radGridView1.Rows.Add(
"A3"
,
"B3"
);
this
.radGridView1.Rows.Add(
"A4"
,
"B4"
);
this
.radGridView1.Rows.Add(
"A5"
,
"B5"
);
this
.radGridView1.Rows.Add(
"A6"
,
"B6"
);
this
.radGridView1.Rows.Add(
"A7"
,
"B7"
);
this
.radGridView1.Rows.Add(
"A8"
,
"B8"
);
this
.radGridView1.Rows.Add(
"A9"
,
"B9"
);
this
.radGridView1.Rows.Add(
"A10"
,
"B10"
);
}
private
void
radGridView1_ContextMenuOpening(
object
sender, ContextMenuOpeningEventArgs e)
{
if
(
this
.radGridView1.CurrentRow.Index > -1)
{
e.ContextMenu.Items.Clear();
RadMenuItem item =
new
RadMenuItem(
"Click me for count"
);
e.ContextMenu.Items.Add(item);
item.Click +=
new
EventHandler(item_Click);
}
}
void
item_Click(
object
sender, EventArgs e)
{
MessageBox.Show(
this
.radGridView1.SelectedRows.Count.ToString() +
" selected rows"
);
}
}
}
Please could you review the code and let me know if that helps or if you can reproduce it with this.
thanks
Richard

This is a grid in Designer:

this
.radGridView1.AutoScroll = true;
this.radGridView1.AutoSize = true;
this.radGridView1.BackColor = System.Drawing.SystemColors.Control;
this.radGridView1.Cursor = System.Windows.Forms.Cursors.Default;
this.radGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.radGridView1.Font = new System.Drawing.Font("Segoe UI", 8.25F);
this.radGridView1.ForeColor = System.Drawing.Color.Black;
this.radGridView1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.radGridView1.Location = new System.Drawing.Point(0, 0);
//
// radGridView1
//
this.radGridView1.MasterTemplate.AllowAddNewRow = false;
this.radGridView1.MasterTemplate.AllowDeleteRow = false;
this.radGridView1.MasterTemplate.AllowEditRow = false;
this.radGridView1.MasterTemplate.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
gridViewTextBoxColumn1.FieldName =
"[Id]";
gridViewTextBoxColumn1.FormatInfo =
new System.Globalization.CultureInfo("");
gridViewTextBoxColumn1.HeaderText =
"Id";
gridViewTextBoxColumn1.IsVisible =
false;
gridViewTextBoxColumn1.Name =
"colId";
gridViewTextBoxColumn1.VisibleInColumnChooser =
false;
gridViewTextBoxColumn1.Width = 42;
gridViewTextBoxColumn2.AllowGroup =
false;
gridViewTextBoxColumn2.FieldName =
"[Name]";
gridViewTextBoxColumn2.FormatInfo =
new System.Globalization.CultureInfo("");
gridViewTextBoxColumn2.HeaderText =
"Name";
gridViewTextBoxColumn2.HeaderTextAlignment = System.Drawing.
ContentAlignment.MiddleLeft;
gridViewTextBoxColumn2.Name =
"colName";
gridViewTextBoxColumn2.Width = 247;
gridViewTextBoxColumn3.FieldName =
"[Trust]";
gridViewTextBoxColumn3.FormatInfo =
new System.Globalization.CultureInfo("");
gridViewTextBoxColumn3.HeaderText =
"Trust";
gridViewTextBoxColumn3.HeaderTextAlignment = System.Drawing.
ContentAlignment.MiddleLeft;
gridViewTextBoxColumn3.Name =
"colTrust";
gridViewTextBoxColumn3.ReadOnly =
true;
gridViewTextBoxColumn3.Width = 84;
gridViewTextBoxColumn4.FieldName =
"[Approved]";
gridViewTextBoxColumn4.FormatInfo =
new System.Globalization.CultureInfo("");
gridViewTextBoxColumn4.HeaderText =
"Approved";
gridViewTextBoxColumn4.Name =
"colApproved";
gridViewTextBoxColumn4.TextAlignment = System.Drawing.
ContentAlignment.MiddleCenter;
gridViewTextBoxColumn4.TextImageRelation = System.Windows.Forms.
TextImageRelation.ImageAboveText;
gridViewTextBoxColumn4.Width = 72;
gridViewTextBoxColumn5.FieldName =
"[Local]";
gridViewTextBoxColumn5.FormatInfo =
new System.Globalization.CultureInfo("");
gridViewTextBoxColumn5.HeaderText =
"Local";
gridViewTextBoxColumn5.IsVisible =
false;
gridViewTextBoxColumn5.Name =
"colLocal";
gridViewTextBoxColumn5.TextAlignment = System.Drawing.
ContentAlignment.MiddleCenter;
gridViewTextBoxColumn5.VisibleInColumnChooser =
false;
gridViewTextBoxColumn5.Width = 36;
gridViewCheckBoxColumn1.FieldName =
"Acknowledged";
gridViewCheckBoxColumn1.FormatInfo =
new System.Globalization.CultureInfo("");
gridViewCheckBoxColumn1.HeaderText =
"Reviewed";
gridViewCheckBoxColumn1.MinWidth = 20;
gridViewCheckBoxColumn1.Name =
"colAcknowledged";
gridViewCheckBoxColumn1.Width = 72;
gridViewDateTimeColumn1.AllowGroup =
false;
gridViewDateTimeColumn1.FieldName =
"[FirstSeenDate]";
gridViewDateTimeColumn1.Format = System.Windows.Forms.
DateTimePickerFormat.Long;
gridViewDateTimeColumn1.FormatInfo =
new System.Globalization.CultureInfo("");
gridViewDateTimeColumn1.HeaderText =
"First Seen";
gridViewDateTimeColumn1.HeaderTextAlignment = System.Drawing.
ContentAlignment.MiddleLeft;
gridViewDateTimeColumn1.Name =
"colFirstSeen";
gridViewDateTimeColumn1.Width = 170;
gridViewDateTimeColumn2.AllowGroup =
false;
gridViewDateTimeColumn2.FieldName =
"[LastModifiedDate]";
gridViewDateTimeColumn2.Format = System.Windows.Forms.
DateTimePickerFormat.Short;
gridViewDateTimeColumn2.FormatInfo =
new System.Globalization.CultureInfo("");
gridViewDateTimeColumn2.HeaderText =
"Last Modified";
gridViewDateTimeColumn2.HeaderTextAlignment = System.Drawing.
ContentAlignment.MiddleLeft;
gridViewDateTimeColumn2.IsVisible =
false;
gridViewDateTimeColumn2.Name =
"colDate";
gridViewDateTimeColumn2.Width = 153;
gridViewTextBoxColumn6.AllowGroup =
false;
gridViewTextBoxColumn6.AllowResize =
false;
gridViewTextBoxColumn6.AllowSort =
false;
gridViewTextBoxColumn6.FieldName =
"[Acknowledged]";
gridViewTextBoxColumn6.FormatInfo =
new System.Globalization.CultureInfo("");
gridViewTextBoxColumn6.HeaderText =
"column1";
gridViewTextBoxColumn6.IsVisible =
false;
gridViewTextBoxColumn6.Name =
"colAckText";
gridViewTextBoxColumn6.VisibleInColumnChooser =
false;
gridViewTextBoxColumn6.Width = 47;
gridViewTextBoxColumn7.AllowGroup =
false;
gridViewTextBoxColumn7.AllowResize =
false;
gridViewTextBoxColumn7.AllowSort =
false;
gridViewTextBoxColumn7.FieldName =
"[gsr]";
gridViewTextBoxColumn7.FormatInfo =
new System.Globalization.CultureInfo("");
gridViewTextBoxColumn7.HeaderText =
"GSR";
gridViewTextBoxColumn7.HeaderTextAlignment = System.Drawing.
ContentAlignment.MiddleLeft;
gridViewTextBoxColumn7.IsVisible =
false;
gridViewTextBoxColumn7.Name =
"colGSR";
gridViewTextBoxColumn7.VisibleInColumnChooser =
false;
gridViewTextBoxColumn7.Width = 48;
this.radGridView1.MasterTemplate.Columns.AddRange(new Telerik.WinControls.UI.GridViewDataColumn[] {
gridViewTextBoxColumn1,
gridViewTextBoxColumn2,
gridViewTextBoxColumn3,
gridViewTextBoxColumn4,
gridViewTextBoxColumn5,
gridViewCheckBoxColumn1,
gridViewDateTimeColumn1,
gridViewDateTimeColumn2,
gridViewTextBoxColumn6,
gridViewTextBoxColumn7});
this.radGridView1.MasterTemplate.DataSource = this.trpubsGUIBindingSource;
this.radGridView1.MasterTemplate.EnableFiltering = true;
this.radGridView1.MasterTemplate.MultiSelect = true;
this.radGridView1.MasterTemplate.ShowFilteringRow = false;
this.radGridView1.MasterTemplate.ShowGroupedColumns = true;
this.radGridView1.Name = "radGridView1";
this.radGridView1.Padding = new System.Windows.Forms.Padding(0, 0, 0, 1);
this.radGridView1.ReadOnly = true;
this.radGridView1.RightToLeft = System.Windows.Forms.RightToLeft.No;
//
//
//
this.radGridView1.RootElement.ForeColor = System.Drawing.Color.Black;
this.radGridView1.RootElement.Padding = new System.Windows.Forms.Padding(0, 0, 0, 1);
this.radGridView1.ShowGroupPanel = false;
this.radGridView1.Size = new System.Drawing.Size(663, 185);
this.radGridView1.TabIndex = 3;
this.radGridView1.Text = "radGridView1";
this.radGridView1.CurrentRowChanged += new Telerik.WinControls.UI.CurrentRowChangedEventHandler(this.radGridView1_CurrentRowChanged);
this.radGridView1.ContextMenuOpening += new Telerik.WinControls.UI.ContextMenuOpeningEventHandler(this.radGridView1_ContextMenuOpening);
this.radGridView1.CellClick += new Telerik.WinControls.UI.GridViewCellEventHandler(this.radGridView1_CellClick);
this.radGridView1.GroupSummaryEvaluate += new Telerik.WinControls.UI.GroupSummaryEvaluateEventHandler(this.radGridView1_GroupSummaryEvaluate);
this.radGridView1.GroupByChanged += new Telerik.WinControls.UI.GridViewCollectionChangedEventHandler(this.radGridView1_GroupByChanged);
this.radGridView1.CellFormatting += new Telerik.WinControls.UI.CellFormattingEventHandler(this.radGridView1_CellFormatting);
this.radGridView1.ViewRowFormatting += new Telerik.WinControls.UI.RowFormattingEventHandler(this.radGridView1_ViewRowFormatting);
this.radGridView1.SelectionChanged += new System.EventHandler(this.radGridView1_SelectionChanged);
this.radGridView1.Click += new System.EventHandler(this.radGridView1_Click);
My grid has datasource. Exception happened several times, but it is not stable.
Thank you
Lily.

I still haven't been able to replicate this though I see that the exception references clearing selected rows. Are you able to paste in here (using the format code block to correctly format C#) both the designer file and form for me to try.
Thanks
Richard

Lilly, Richard is right, please try to use the code format code block to post code otherwise it is unreadable.
Also i have seen that you have a lot of eventhandlers added, selection changed, are you sure you are not clearing the selection in one of those?
Until then can you please try the following?
void
button_Click(
object
sender, EventArgs e)
{
var selectedRowsCount = radGridView1.CurrentView.ViewInfo.Rows.Count(r => r.IsSelected);
var selectedRows = radGridView1.SelectedRows.Count;
MessageBox.Show(
"SelectedRowsCounted: "
+ selectedRowsCount +
", SelectedRows:"
+ selectedRows);
}
on a button click anywhere. Because the CurrentView should always have the latest info in the ViewInfo.Rows about the current state of the rows, this should tell us if the problem is coming from the SelectedRows property or from somewhere else.
Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga
Telerik WinForms MVP

Error 1 Non-invocable member 'Telerik.WinControls.UI.GridViewChildRowCollection.Count' cannot be used like a method.

I suspect that you are using .NET Framework 2.0, and therefore it is failing on this line
var selectedRowsCount = radGridView1.CurrentView.ViewInfo.Rows.Count(r => r.IsSelected);
Richard


If you are using 2.0 you can just iterate over the
radGridView1.CurrentView.ViewInfo.Rows
, and foreach selected row increment a counter or do something else. It should work like this.Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga

Is this a known issue with using Telerik controls with Dot Net 2.0 that multi select does not always return the correct number of selected rows.
Thanks,
Vivek
I would kindly ask you to open a support ticket where you have enclosed your projects. In addition, could you explain the exact steps to reproduce it? This will help us to understand the exact scenario in depth for each of you.
Kind regards,Svett
the Telerik team