I try to insert a new row in a grid and then set a cell automatically to edit mode. The row is inserted via databinding to a business object, and not directly to the grid. The row is highlighted but no cell is in edit mode. If I first click on the grid and then inserts a new row it works for every new row thereafter. It's look like I am missing something the mouseclick do. A row insert is done by adding a new business object, and I deal with the new row in InitializeRow like this:
{
e.Row.Activate();
grid.ActiveCell = aCell;
}
The PerformAction seems to have no effect. If I click the grid first, it works as expected.
Some suggestion?
Kind Regards
Magnus
Oslo, Norway
Here's what I use for doing what you ask:
private void csfGridIkkeBehandletNemd_InitializeRow(object sender, Infragistics.Win.UltraWinGrid.InitializeRowEventArgs e) { UltraGrid grid = (UltraGrid)sender; e.Row.Activate(); UltraGridCell aCell = e.Row.Cells["Tekst"]; grid.ActiveCell = aCell; grid.PerformAction(UltraGridAction.EnterEditMode, false, false); grid.ActiveCell.SelStart = 0; }
Thanks.
But it seems that PerfomAction have no effect. I get an error if i try to do SelStart after
grid.PerformAction(UltraGridAction.EnterEditMode)
Error: (selStart are not supported while the cell is not in edit mode)
It seems to me that you should be setting focus to the cell using the click of the button. You don't need a grid event for this.
private void button1_Click(object sender, EventArgs e) { DataRow row = this.dt1.NewRow(); this.dt1.Rows.Add(row); this.ultraGrid1.Rows[this.ultraGrid1.Rows.Count - 1].Cells[0].Activate(); this.ultraGrid1.PerformAction(UltraGridAction.EnterEditMode); this.ultraGrid1.ActiveCell.SelStart = 0; }
Yes, I agree. I have moved all the code regarding row insert into the button_click. See my earlier post today. But it has no effect on the result.
The biggest difference in your example is when inserting rows:
DataRow row = this.dt1.NewRow(); this.dt1.Rows.Add(row);
But I use something like this to insert a new row:
BOCollection.Add(New BOItem(id))
Where BOCollection og BOItem is business objects.
Assuming you BOCollection is an IBindingList and notifies the grid that a new row has been added, this should not make any difference at all. The code I posted here works fine for me. What's not working for you?
The ActiveCell is not set in EditMode. If I use SelStart= 0 , i got an error message ".... not in EditMode". So the PerfomAction have no effect.
But if I mouseclick the grid before adding a row it works, and it will work for all rows inserted thereafter.
Hm, that's odd. This worked fine for me.
Perhaps it's a timing issue and the cell has no entered edit mode by the time SelStart is being set. Maybe you need to use BeginInvoke to call a method that sets the SelStart on the active cell of the grid.
Why set SelStart, anyway? Setting it to 0 is redundant - it will already be 0 when it enters edit mode.
Sorry for digging out such an old post ... Google send me here after searching for a solution to this exact same problem I had at work. Took a while to explore everything and finally we found out the cause of the error : the cell activation mode was set as "NoEdit" in the initialization of the Form.
Columns("NewDelai").CellActivation = Activation.NoEdit
so whenever we try to force the edit mode on this cell programmatically, we ended up with the same error OP got. ugRapport.PerformAction(UltraGridAction.EnterEditMode) ugRapport.ActiveCell.SelStart = 0
Hope this can help others too !
By trial and error...I've fixed the problem -- or at least worked around it. This is a threading issue on the Ultragrid. If I call: grid.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridAction.EnterEditMode) directly (on the first row, first cell) it just doesn't work. However, if I set up a delegate and invoke the delegate, it works fine:
Private Delegate Sub PerformAction()
Sub WinGridPerformAction() grid.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridAction.EnterEditMode) End Sub
Sub InitGrid() grid.DataSource = myDataSource grid.Focus() grid.DisplayLayout.Rows(0).Cells(0).Activate() Me.BeginInvoke(New PerformAction(AddressOf WinGridPerformAction)) End Sub
I am having the exact same problem. Can anyone help?
No matter what I do and where I do it, the first cell is active, but will not enter edit mode without a mouse click.
the row is active, teh cell is active, but Performaction(.....EnterEditMode) just doesn't make it go into edit mode! ARRRGGGH driving me nuts.
maggreen: did you find any solution for this? I am having the exact problem.
I managed to work around this with the following code:
row.Cells(0).Activate()
grid.PerformAction(UltraGridAction.FirstCellInRow)