AD
Administrator
Syncfusion Team
March 22, 2005 06:36 PM UTC
In a griddataboundgrid, you need ot handle model.QueryCellInfo and Model.SaveCellInfo to dynamically provide/save GridFormulaTag objects as in this KB.
http://www.syncfusion.com/support/kb/grid/Default.aspx?ToDo=view&questId=104&catId=11
Are you doing this? If so, then it is this code that is providing the FormulaTag to the first and last row. And that would be where to look for the problem. It might be something like zero-based and one-based row indexes. (Normmaly, the first data row in the grid is row 1 but in your formulatag cache, this might be row 0???).
VI
Vinay
March 22, 2005 06:55 PM UTC
Hi,
Yes, i am using the QueryCellInfo and SaveCellInfo, but i do not find the any problems in the code.
When the Grid is assigned a datasource and if the first cell i select is the formula cell in the first row. The formula displayed is the right formula. But if i select any cell another cell after assigning the datasource and go back to the first row the formula displayed is the formula that is to be diaplayed on the last row.
I have downloaded the sample u gave me and saw the same problem. i just made a small change in the code so that the formula is not fixed always.
if(e.ColIndex == 3 && e.RowIndex > 0 && e.RowIndex <= dt.Rows.Count)
{
e.Style.CellType = "FormulaCell";
if(e.Style.Text.Length == 0)
e.Style.Text = string.Format("=({0}{1} + {2}{1}) / 2", GridRangeInfo.GetAlphaLabel(1), GridRangeInfo.GetNumericLabel(e.RowIndex),GridRangeInfo.GetAlphaLabel(2));
e.Style.FormulaTag = (GridFormulaTag) this.formulaTags[e.RowIndex - 1];
e.Handled = true;
}
Regards
Vinay
AD
Administrator
Syncfusion Team
March 22, 2005 07:21 PM UTC
If you set the e.Style.Text to be something, then you have to make sure the cached FormulaTag is properly set as well. Normally, the safest way to to this is to set the savedFormulaTag to null when you change the text that defines the formula. This way, the grid should reparse the formula and recompute it. If you do not do this, then the grid will just use whatewver was last saved in the FormulaTag which may or may not be the proper values for the new formula in the text.
What forum thread holds the sample you are referring to?
VI
Vinay
March 22, 2005 07:22 PM UTC
http://www.syncfusion.com/support/kb/grid/Default.aspx?ToDo=view&questId=104&catId=11
VI
Vinay
March 22, 2005 07:30 PM UTC
Hi
The problem is that the text (actual formula string) in first row is changing to the last row value. But the computed value is the right value shown.
For ex. if the datasource had the following values
Row 1: =5+2
row 2: 2
row 3: 4
row 4: =3+2
The computed value shown on row1 is 7 but when focus on the cell the text displayed is 3+2 instead of 5+2.
Thanks
Vinay
AD
Administrator
Syncfusion Team
March 22, 2005 08:15 PM UTC
How do I see the problem in the sample from the K?. I copied your code into GridQueryCellInfo, and ran the sample. When I click on cell (1,3), I see (A1+B1)/2. and when I click on the last cell in teh column, I see (A10+B10)/2. What do you see when you do this?
I am using 3.0.1.0.
VI
Vinay
March 22, 2005 08:33 PM UTC
Hi,
If u select the first row just as the forms loads the correct formula is displayed on the cell. After which if u move to any other row and then return to the first row the formula from the last cell is displayed.
If u select any other row after the form loads and then select the first row the formula from the last cell is displayed on the cell.
Regards
Vinay
AD
Administrator
Syncfusion Team
March 22, 2005 10:52 PM UTC
What version are you using? I do not see this behavior in 3.0.1.0.
If I click on 1,3, I see (A1+B1)/2. I thne click on 2,3 and see (A2+B2)/2. I then click back on row 1 and see (A1+B1)/2. Here is a picture of the 3 screens in the order of the clicks.
http://www.syncfusion.com/Support/user/uploads/pict_bb1810fe.zip
VI
Vinay
March 23, 2005 10:06 AM UTC
Hi,
I am using version 3.0.1.0. Have u made the change to the GridQueryCellInfo event (as in the earlier code which was downloaded from KB the formulas was always forced to be the same). Attached is the CS code.
Regards
Vinay
CS_7051.zip
AD
Administrator
Syncfusion Team
March 23, 2005 11:03 AM UTC
I am sorry. It was me who was using the wrong version. I downloaded teh sample and just ran it, and it was pulling in 2.1.0.9 instead of 3.0.1.0.
I was able to avoid this problem by setting the DirectSaveCellInfo property on teh binder before setting the DataSource.
this.gridDataBoundGrid1.Binder.DirectSaveCellInfo = true;
this.gridDataBoundGrid1.DataSource = dt;
VI
Vinay
March 23, 2005 02:21 PM UTC
Hi Clay,
Thanks for the help. It solved the problem but i encountered another problem related to circular reference. In the same sample if i assign a formula in row 1 =sum(c2:c9) and then in the row 4 i assign a formula =sum(c1:c3) i get a Stack overflow exception, instead of displaying a circular reference error message.
Regards
Vinay
AD
Administrator
Syncfusion Team
March 23, 2005 06:41 PM UTC
I think we will have to address this in our code.
There is an exceptionmanager class that you can use to catch this error, but at that point, there is no good way to back out of the error. And this is why I think we will have to do something to handle this. Here is the event if you want to take a look at it.
Syncfusion.Windows.Forms.ExceptionManager.ExceptionCatched += new Syncfusion.Windows.Forms.ExceptionCatchedEventHandler(ExceptionManager_ExceptionCatched);
VI
Vinay
March 24, 2005 06:49 AM UTC
Hi,
I used the ExceptionCatchedEventHandler to catch the error. In the ExceptionCatchedEventHandler i am displaying the exception message, but this message keeps repeating and then there is a stack overflow exception and the application crashes.
Our entire application is dependent upon the GridControl with formulacells and this would be very serious issue for us. Any help will be greatly appreciated.
Regards
Vinay
>I think we will have to address this in our code.
>
>There is an exceptionmanager class that you can use to catch this error, but at that point, there is no good way to back out of the error. And this is why I think we will have to do something to handle this. Here is the event if you want to take a look at it.
>
>Syncfusion.Windows.Forms.ExceptionManager.ExceptionCatched += new Syncfusion.Windows.Forms.ExceptionCatchedEventHandler(ExceptionManager_ExceptionCatched);
>
AD
Administrator
Syncfusion Team
March 24, 2005 09:18 AM UTC
As I indicated, I think this will have to be handled in our code. I said I did not know how to clean up the exception even if you caught it, so I do not really have any suggestion on how you can handle cleaning up that exception.
We are working on this problem. We have implemented one solution, but are not sure it is the one we want to use. It is likely that something will be finalized today in regard to exactly how we inted to correct it. But you will have to get new code from us to handle this.
VI
Vinay
March 28, 2005 06:26 AM UTC
Hi Clay,
Can u please let us know the status of the Circular reference issue reported. If resolved can u please send us the code as this is a very critical issue in our application.
Thanks & Regards
Vinay
AD
Administrator
Syncfusion Team
March 28, 2005 08:21 AM UTC
This has been corrected in our source code. A property as been added that whether circular checks are as part of the validation process when you try to leave a cell. Setting this property,
GridFormulaEngine engine = ((GridFormulaCellModel)this.gridDataBoundGrid1.Model.CellModels["FormulaCell"]).Engine;
engine.DoCircularCheckInValidating = true;
enbales this check which catches the error you mentioned above.
To get a private build, you must submit a direct trac support incident and request it. Or, you can wait to see if this change makes it into the next public release which is in the works. (If there is another test cycle scheduled, this change will make it into this upcoming release. If they decide to release the current build that is in testing, it will not.)