Hi,
I have an UltraGrid bound to a DataSet. There is an InitializeRow event which initializes the grid rows with some check boxes. Now when i change the value of a cell in code then the event gets fired again. This is odd as the event is supposed to fire when data is bound. This is causing big performance issues as i loop and change value of some cells in all rows in the grid (some 3000 rows). Is there a way to ensure this event fires only when the grid's datasource is set and not for every cell data change in code?
Cheers,
SK
Only do your code if e.reinitialize is false.
Nick
Currently i am doing it like that. But that still does not help performance as the event fires but does nothing. What i wanted to know is, is there any property which is ensure this event fires only when the gird is data bound, otherwise it makes no sense. Why should the event fire when i change data of a cell in my code?
Not a property I know of however it is useful feature if you have other cells you want to modify depending on the contents changed. Believe you could turn off the event at some point but I've not done that so you may have to search through some of the past messages about doing that.
Don't know if you can accomplish what you need to do in InitializeLayout or not but if so that is only fired on a datasource change.
It might have saved me some time.
Hm, I guess I must have missed it when you asked how to do that. In any case, there is no automatic conversion, you simply have to loop through the rows and copy the data.
I have used UltraDataSource and converted my Dataset to UltraDataSource. What i really wanted was a sample on how to convert Dataset to UltraDataSource. But i had to do it all myself. This was a bit disappointing after having paid for almost 10 developer licenses for Infragistics.
contactkalim said:What iam doing is that i have a dataset in which i have 2 datatables which have a parent child relationship. This is bound to the UltraGrid. Now I needed a check box and and image column at level 1 rows and disbale level 2 rows. So i was looping through all rows in the Grid to do this. This was making the grid load very slowly. Then i felt may be i should use Initialize row event. That seemed to have fixed the loading problem.
Okay, that makes sense.
contactkalim said:So i thought may be its the problem of the InitializeRow event. But that is not the case as per you and the forum its the datasource which is a Dataset which is slow when fetching child rows. So please suggest me a datasource which serves my purpose otherwise please tell me why should i pay licence fee for this grid. What i wanted to know is how i can use some other datasource in the present condition? I have a Dataset so definetly i should be able to convert this into some other datasource for which the Grid gives me the functionality our users want. Please advice.
Okay. I very much doubt that the InitializeRow event has anything to do with this. As I said, the DataSet tends to be pretty inefficient when you retrieve child rows. This has nothing to do with the grid, and you would experience the same issue with any control that displays hierarchical data.
I don't know of any other data sources that retrieve data from a database, but if you want to use a data source that is more efficient, then you could use the UltraDataSource component. Of course, you would have to load all of the data into this control up front, so that would cause a performance hit. Perhaps there are other, 3rd-party data sources out there that are more efficient than the DataSet.
You might try creating a BindingSource and setting it's datasource to your dataset. Then setting the grid datasource to the bindingsource.
There was a performance problem associated with parent child relationships caused by Microsoft when (VS 2005 came out) I believe.