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)
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.
Yes it is very odd. I am using selStart only because of a tip earlier in this tread. That is not my main problem but only a sympton, the problem is to get the cell in editmode.
hi maggreen,
I had the same problem like you today. My solution is: I put the code to add a new row into the grid into the Shown event of the form and then all is fine. Try this, perhaps it helps. As Mike said it seams to me like a timing issue.
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)