Hello!
I had a chance to notice some strange behavior with setting CurrentColumn.
For instance I would like to change focused column, in case someone tries to focus on the wrong column.
Let's review 2 cases:
Case #1 (without an issue):
1) User clicks on any cell (different from the current, for instance user cicked on column 2).
2) Grid tries to set Cell from column 2 as current.
3) RadGridView.CurrentCellChanged event is being triggered.
4) Method subscribed on RadGridView.CurrentCellChanged event sets CurrentColumn (for instance it sets 3 if Current one is not 3).
5) Grid sets Cell from third column as current.
6) Nothing is looped.
Case #2 (with issue):
1) Some Method from code sets CurrentColumn as 2 (different from the current one)
2) Grid tries to set Cell from column 2 as current
3) RadGridView.CurrentCellChanged event is being triggered.
4) Method subscribed on RadGridView.CurrentCellChanged event sets CurrentColumn (for instance it sets 3 if Current one is not 3).
5) Grid sets Cell from third column as current.
6) Loop has formed
6.1) Every RadGridView.CurrentCellChanged call it changes the input params:
call 1:
e.CurrentCell = (cell from column 2)
e.NewCell = (cell from column 3)
call 2:
e.CurrentCell = (cell from column 3)
e.NewCell = (cell from column 2)
call 3:
e.CurrentCell = (cell from column 2)
e.NewCell = (cell from column 3)
...
Code:
public partial class Form1 : Form
{
private BindingSource bindingSource;
public Form1()
{
InitializeComponent();
InitializeGrid();
radGridView1.CurrentCellChanged += RadGridView1_CurrentCellChanged;
}
private void RadGridView1_CurrentCellChanged(object sender, CurrentCellChangedEventArgs e)
{
if (radGridView1.CurrentColumn != radGridView1.Columns[2])
radGridView1.CurrentColumn = radGridView1.Columns[2];
}
private void InitializeGrid()
{
bindingSource = new BindingSource();
DataTable table = new DataTable();
table.Columns.Add("Id", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Age", typeof(int));
table.Rows.Add(1, "Alice", 30);
table.Rows.Add(2, "Bob", 25);
bindingSource.DataSource = table;
radGridView1.DataSource = bindingSource;
}
private void button1_Click(object sender, EventArgs e)
{
radGridView1.CurrentColumn = radGridView1.Columns[1];
}
}
Is the any restriction of using CurrentCellChanged event?
Is there any other way we can provide such functionality?
Thank You!