0
votes

Let me sketch the situation first: We have an application that monitors file-transfers from & to a fileserver. When the user transfers a/multiple file(s) then the result of the copy is shown in a overview where a Xtragrid-Gridcontrol shows all the files and if the copy was successfull or not.

When de copy was not succesfull then a combobox is shown to choose the desired action (ignore,retry, link,...). This combobox is set using the event CustomRowCellEdit

Code example from that CustomRowCellEdit:

        Dim myCb As RepositoryItemLookUpEdit = New RepositoryItemLookUpEdit
        myCb.DataSource = GenerateActionlistForDoubleFolder()
        myCb.NullValuePrompt = Documentum.Common.Tools.Translate(Tools.Config(m_Docbase), "[SELECT_ACTION]")
        myCb.NullText = Documentum.Common.Tools.Translate(Tools.Config(m_Docbase), "[SELECT_ACTION]")
        e.RepositoryItem = myCb

The problem:

Larger and larger quatities of files are being copied. the quatities are sometimes that big that the Xtragrid-Gridcontrol is often still loading when the form is shown (although the datasource has already been set).If the user interacts too soon with xtragrid-gridcontrol (while its still loading) then we get an ArgumentOutOfRangeException exception of the Xtragrid. (Due to the datasource of the visual component still changing)

The needed solution:

We should prevent the user to interact with grid while its still loading (seems obivious).

Not working solutions:

The event DataSourceChanged is being fired when you set the datasource. Not when all rows are loaded.

Simple enabling/disabling the grid everytime the event CustomRowCellEdit is fired -> Massive performanceloss

Question: Has anyone encoutered this problem aswell? Is there a fullproof way to detect whether an Xtragrid has completely loaded its datasource (and visualized it)? Or is there a workaround where i don't need to use the CustomRowCellEdit anymore? (Solutions from other types of grids are welcome aswell)

Thank you all for your time

Note: Don't ask for more code. The problem doesn't lie in the code, it lies in my usage of the Gridcontrol-Events

Documentation: RowCellEdit

1
I don't quite understand your problem description, but I recall some kind of problem I once had with XtraGrid that was cured by using GridControl.ForceInitialize. See here for exmple: documentation.devexpress.com/#WindowsForms/… - RenniePet
Apparently you understood it quite well. The solution you offered refers to the same area of problems. Yet this did not solve this specfic problem. But it did however solve a bug in another application of mine. Therefor: Thanks mate! - User999999

1 Answers

1
votes

I run into this sometimes in my applications as well. I primarily bind my grids to DataTables, and the solution that I've found to work the best is, while your data is loading, to set your gridControl.DataSource to null/Nothing and call Application.DoEvents(). Once the underlying datasource is filled, set the DataSource back to the source.

The goal of this is to achieve a deterministic way of telling when your data is loaded. Here's a basic example implementation.

myGrid.DataSource = Nothing
Application.DoEvents
FillDataTableWithLoadsOfRows(myDataTable)
myGrid.DataSource = myDataTable
' ...
'Whatever actions to do that require the data to be in the grid
' ...