I want to disable the selection of certain rows in a datagridview.
It must be possible to remove the select property for one or more datagridview rows in a datagridview shown in a winform. The goal is that the user can't select certain rows. (depending on a condition)
Thankx,
If SelectionMode is FullRowSelect, then you'll need to override SetSelectedRowCore for that DataGridView, and not call the base SetSelectedRowCore for rows you don't want selected.
If SelectionMode is not FullRowSelect, you'll want to additionally override SetSelectedCellCore (and not call the base SetSelectedCellCore for rows you don't want selected), as SetSelectedRowCore will only kick in if you click the row header and not an individual cell.
Here's an example:
public class MyDataGridView : DataGridView
{
protected override void SetSelectedRowCore(int rowIndex, bool selected)
{
if (selected && WantRowSelection(rowIndex))
{
base.SetSelectedRowCore(rowIndex, selected);
}
}
protected virtual void SetSelectedCellCore(int columnIndex, int rowIndex, bool selected)
{
if (selected && WantRowSelection(rowIndex))
{
base.SetSelectedRowCore(rowIndex, selected);
}
}
bool WantRowSelection(int rowIndex)
{
//return true if you want the row to be selectable, false otherwise
}
}
If you're using WinForms, crack open your designer.cs for the relevant form, and change the declaration of your DataGridView instance to use this new class instead of DataGridView, and also replace the this.blahblahblah = new System.Windows.Forms.DataGridView() to point to the new class.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With