The Forums on slxdeveloper.com are now retired. The forum archive will remain available for the time being. Thank you for your participation on slxdeveloper.com!
|
|
DataGrid "SetFieldValue" method.
Posted: 04 Aug 06 7:21 AM
|
fiogf49gjkf0d I'm trying to use this method to update a cell in a row of a datagrid control but I keep getting "Catastrophic error". I saw the web posting at http://crm.ittoolbox.com/groups/technical-functional/saleslogix-l/change-datagrid-fields-value-by-script-1108159 but my case is very simple. I only have a single string column per row in the grid.
Has anyone been able to get this to work? Is there a service pack or hot fix that takes care of this? As a workaround, is there a way to force the selected row based on the row ID? I'm thinking worst case I could refresh the grid then manually force the selected row to be the row that was selected before the refresh. |
|
|
|
Re: DataGrid "SetFieldValue" method.
Posted: 04 Aug 06 12:41 PM
|
fiogf49gjkf0d There is a 4th parameter in certain versions of SalesLogix I believe which could cause the issue. Another thing is not having the ID field present on the grid but making the column invisible. I personally hate the idea because GetCurrentField("") returns the primary key and if you were to profile the grid you would see that it is in fact using that value internally. I have a problem with wholesale modification of grids for something like this, it was one of the reasons I rolled my own CascadeDelete function that DIDN'T require overriding the grid's existing delete code.
I would use as much msgbox debugging as possible. I gave the example of something like this: MsgBox "SetFieldValue " + PrimaryKeyValue + ", ENDDATE, " + dAddOpenDays(dBeginDate, CDbl(sDuration)) + ", True" which should display exactly what the function should be calling. It's possible that it is looking for a value that isn't there, or the data is somehow screwing things up internally. |
|
|
|
Re: DataGrid "SetFieldValue" method.
Posted: 04 Aug 06 12:52 PM
|
fiogf49gjkf0d Thanks for the response. I'll debug further but since it's such a straight-forward call I don't have much hope. What I'm ultimately trying to do is update a single row in the grid after returning from a manage form while keeping the selected row selected. If I refresh the grid the whole grid refreshes and I lose the row selection. I figured I could avoid a grid refresh by using "SetFieldValue" to show the current DB value in the selected row's cell after returning from the manage form. |
|
|
|
Re: DataGrid "SetFieldValue" method.
Posted: 04 Aug 06 1:15 PM
|
fiogf49gjkf0d Ahh I combat that by placing a stringPrimaryKeyValue variable in the Form level and then update it using On* events. This way the value is persisted in the event of a refresh but you can still get to it when necessary. There's the possibility that using the right event will trigger the update during a refresh, OnRowSelect or OnChangeNode being the places this would most likely happen. You'll also want to put in some security to make sure that it doesn't just use the last value but has a way of verifying that the events that lead up to this point functioned correctly. You don't want to use the primary key you captured 3 calls ago or you'll have a more fun time debugging that one. |
|
|
|
Re: DataGrid "SetFieldValue" method.
Posted: 07 Aug 06 7:22 AM
|
fiogf49gjkf0d How does this help with making a specific row in the grid the selected row? Sorry - you may have lost me. Basically all I want to do is refresh a particular row in a grid (so the current DB values are displayed) without having to refresh the whole grid. I'm hoping to keep the row selected while refreshing the row. |
|
|
|
Re: DataGrid "SetFieldValue" method.
Posted: 07 Aug 06 11:01 AM
|
fiogf49gjkf0d Disregard. I can now force a row to be selected and update columns within a row.
Forcing a row to be selected by primary key works as follows:
With DataGrid1.Selection .Clear .Add strPrimaryKeyValue End With
Updating the columns of a selected row works as follows:
DataGrid1.SetFieldValue strPrimaryKeyValue, strColumn, strValue, blnUpdateRecordset
The key step I was missing is that in both cases the primary key column must be manually added as a column in the data grid's layout then set to hidden via the columns property pages (as opposed to the default SLX data grid primary key behavior). Thanks for taking the time to help me with this.
|
|
|
|
Re: DataGrid "SetFieldValue" method.
Posted: 07 Aug 06 11:55 AM
|
fiogf49gjkf0d Originally posted by Greg Mussitsch
What I'm ultimately trying to do is update a single row in the grid after returning from a manage form while keeping the selected row selected. |
|
I gave you my workaround for the selection method (it isn't exposed in 6.1). You store a value before the edit or add, let the underlying forms do their thing, then do processing on the primary key you stored back in step 1.
I personally never liked having to add the primary key column manually and I believe in 6.1 there wasn't a visible property on columns, which meant a bit of magic to get them out of the way. I'll be adding them to every grid from now on though since there is more than one method that relies on them being there. |
|
|
|
Re: DataGrid "SetFieldValue" method.
Posted: 08 Aug 06 7:46 AM
|
fiogf49gjkf0d Be careful with this, it only works if the record in question is visible in the grid. For example, if you select the top 10 rows in a grid that can display 50, your fine. But, if you select rows 45-55 in the same grid 45-50 will the hi-lighted and 51-55 will not be, even when you scroll (matter of fact 45-50 won't be either if you scroll them off the visible range of the grid manually). The same applies if you select row 100 and the grid displays from row 1. So, make sure you move the active row into the visible range of the grid, and don't go wild with it. I also believe the grid internals only track what it originally hi-lights, so 45-50 in the second example. I tracked the selected IDs separately to support further functionality. |
|
|
|
Re: DataGrid "SetFieldValue" method.
Posted: 27 Aug 06 2:34 PM
|
fiogf49gjkf0d The "trick" to being able to edit any row (in teh recordset) is to check the "sorted" property for the grid. Sorted is really a code-word for Load all records form the datagrid's recordset into memory -- RJL |
|
|
|