StrataFrame Forum

Problem after upgrade to 1.6.1

http://forum.strataframe.net/Topic13577.aspx

By Chan - 1/19/2008

Hi,

I am facing problem after upgrade 1.6.1. Now, whenever I click new button, I will hit error below even though I have set AllowNullValueOnNewRow = false. Before this, everything just working fine. Any ideas?



System.InvalidCastException was unhandled by user code

Message="Specified cast is not valid."

Source="InventoryBusinessObject"

StackTrace:

at JK.Inventory.Product.BusinessObject.ItemsBO.get_Recalled() in F:\Projects\Inventory\InventoryBusinessObject\Product\ItemsBO.Designer.cs:line 980

at JK.Inventory.Product.BusinessObject.ItemsBO.Field_Recalled_Descriptor.GetValue(Object component) in F:\Projects\Inventory\InventoryBusinessObject\Product\ItemsBO.Designer.cs:line 2545

at System.Windows.Forms.BindToObject.GetValue()

at System.Windows.Forms.Binding.PushData(Boolean force)
By Chan - 1/19/2008

I tried to restore back those DLL, but it will crash VS, cause I am unable to open my project.



Please advice. URGENT!!!
By Chan - 1/19/2008

Hi,

Just to add on, 1.6.1 mentioned is refering to assemblies posted in forum as patch.



Thank you
By StrataFrame Team - 1/21/2008

1) Are you explicitly setting the value of the Recalled field to DBNull.Value in the SetDefaultValues()?

2) Are any of the other fields in the new row DBNull.Value also, or just the Recalled field?

3) Is it trying to cast a DBNull.Value to a Boolean, or something else?

By Chan - 1/21/2008

Hi,



1) Are you explicitly setting the value of the Recalled field to DBNull.Value in the SetDefaultValues()?



No, I doesn't set DBNull.Value to recalled field. Beside, the error occurred BEFORE SetDefaultValues event fired.



2) Are any of the other fields in the new row DBNull.Value also, or just the Recalled field?



It happen to ALL fields.



3) Is it trying to cast a DBNull.Value to a Boolean, or something else?



To Boolean. The same problem happen to other fields as well, which is integer.



Please advice. It is urgent.



Thank you
By StrataFrame Team - 1/21/2008

Is there more to the stack trace, or is what you posted in the first post all of it?  I'm wondering if we could get back to what is causing the binding to update immediately after you add the new row... the binding shouldn't be updating until after all of the values are initialized and the SetDefaultValues() is called.
By Chan - 1/21/2008

Hi,



>   InventoryBusinessObject.dll!JK.Inventory.Product.BusinessObject.ItemsBO.CategoryID.get() Line 452 + 0x2e bytes   C#

   InventoryBusinessObject.dll!JK.Inventory.Product.BusinessObject.ItemsBO.Field_CategoryID_Descriptor.GetValue(object component = {JK.Inventory.Product.BusinessObject.ItemsBO}) Line 1841 + 0x29 bytes   C#

   [External Code]   

   InventoryApplication.exe!JK.Inventory.Application.AppMain.Main() Line 45 + 0x6 bytes   C#

   [External Code]   



I checked my code again, and found that as you suspected it might be caused by data binding. It works fine If I just



ItemsBO loBO = new ItemsBO();

loBO.Add();




In my project, the error happen at least two fields which :-



1. Bind to SF's check box

2. Custom lookup control inherited from DevExpress lookupedit.



How should I check next?
By Chan - 1/21/2008

Hi.

Just curious, any ideas why didn't the error happen in prior version? Anything changed?
By Chan - 1/21/2008

Hi,

Any possible to get the full source code for 1.6.1 (as posted at forum) so that I could debug?



You helps are much appreciated.



Thank you
By Chan - 1/22/2008

Hi,

I have successfully reverted back all SF assemblies. And now my application is working fine. So, I am sure something goes wrong with the latest 1.6.1 as posted at forum. Either my mistake or SF source code bug. How could I clarify this?



I tried to disassembly MicroFour Strataframe Business.dll, but failed



System.IndexOutOfRangeException: Index was outside the bounds [of] the array.

at Reflector.CodeModel.Memory.ParameterDeclarationCollection.get_Item(Int32 index)

at ᜢ.ᜀ.ᜁ(IEventDeclaration A_0)

at ᜢ.ᜀ.ᜃ(ITypeDeclaration A_0)

at ᜢ.ᜀ.ᜀ(INamespace A_0)

at ភ.ᜀ(ITypeDeclaration A_0, String A_1, ILanguageWriterConfiguration A_2)

Imports MicroFour.StrataFrame

Imports MicroFour.StrataFrame.Data



I need to changes of Browse Dialog Date setting. Please help.



Thank you
By Trent L. Taylor - 1/23/2008

Chan,

There is no reason that we could not publish this code.  I need to get it ready on this side and try to have it posted by tomorrow.

By Trent L. Taylor - 1/23/2008

OK...if you login to the My Account area, you should be able to see the Source Code Setup for the 1.6.5 beta.  This way you can be running on the beta and still get the source code.
By Chan - 1/24/2008

Hi,

Thank you for source code.



I have recompile SF and run my program and able to reproduce my problem again. Below is the call stack, please advice:



>   SaleBusinessObject.dll!JK.Inventory.Sale.BusinessObject.SaleDetailsBO.SubTotal.get() Line 463 + 0x34 bytes   C#

   SaleBusinessObject.dll!JK.Inventory.Sale.BusinessObject.SaleDetailsBO.Field_SubTotal_Descriptor.GetValue(object component = {JK.Inventory.Sale.BusinessObject.SaleDetailsBO}) Line 1056 + 0x2c bytes   C#

   [External Code]   

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessBindingSource.OnListChanged(System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) Line 123 + 0x1b bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessBindingSource.BusinessObject_IsDirtyChanged(Object sender = {JK.Inventory.Sale.BusinessObject.SaleDetailsBO}, System.EventArgs e = {System.EventArgs}) Line 705 + 0x21 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.raise_IsDirtyChanged(Object sender = {JK.Inventory.Sale.BusinessObject.SaleDetailsBO}, System.EventArgs e = {System.EventArgs}) Line 1071 + 0x21 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.OnIsDirtyChanged(Boolean DirtyShouldBe = True) Line 1086 + 0x12 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.CurrentView_ListChanged(Object sender = {System.Data.DataView}, System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) Line 2431 + 0x10 bytes   Basic

   [External Code]   

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.NewRow() Line 6312 + 0x23 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.Add(Boolean CheckSecurity = True) Line 7610 + 0xa bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.Add() Line 7580 + 0xe bytes   Basic

   POSApplication.exe!JK.POS.UI.Windows.Forms.POSForm.AddSale() Line 94 + 0xe bytes   C#

   POSApplication.exe!JK.POS.UI.Windows.Forms.POSForm.cmdNew_ItemClick(object sender = {DevExpress.XtraBars.Ribbon.RibbonBarManager}, DevExpress.XtraBars.ItemClickEventArgs e = {DevExpress.XtraBars.ItemClickEventArgs}) Line 88 + 0x7 bytes   C#

   [External Code]   

   MicroFour StrataFrame UI.dll!MicroFour.StrataFrame.Application.StrataFrameApplication.RunApplication() Line 220 + 0x8 bytes   Basic

   POSApplication.exe!JK.POS.Application.AppMain.Main() Line 40 + 0x6 bytes   C#

   [External Code]   




Below is the code at AddSale()



private void AddSale()

{

this.Add();

saleDetailsBO.Add();

}





Thank you
By Chan - 1/24/2008

Hi,

Below is another call stack which is NOT using BusinessBindingSource.



>   InventoryBusinessObject.dll!JK.Inventory.Product.BusinessObject.ItemsBO.Recalled.get() Line 980 + 0x2e bytes   C#

   InventoryBusinessObject.dll!JK.Inventory.Product.BusinessObject.ItemsBO.Field_Recalled_Descriptor.GetValue(object component = { [JK.Inventory.Product.BusinessObject.ItemsBO]}) Line 2545 + 0x29 bytes   C#

   [External Code]   

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.AddBinding(System.Windows.Forms.Control ControlToRefresh = {MicroFour.StrataFrame.UI.Windows.Forms.CheckBox}, String PropertyName = "Checked", String FieldName = "Recalled") Line 2087 + 0x17 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.RefreshControl(MicroFour.StrataFrame.UI.Windows.Forms.IBusinessBindable ControlToRefresh = {MicroFour.StrataFrame.UI.Windows.Forms.CheckBox}, Boolean DataPresent = True) Line 3399 + 0x3f bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.RefreshBoundControls() Line 3291 + 0x11 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.raise_Navigated(MicroFour.StrataFrame.Business.NavigatedEventArgs e = {MicroFour.StrataFrame.Business.NavigatedEventArgs}) Line 1369 + 0x9 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.OnNavigated(MicroFour.StrataFrame.Business.NavigatedEventArgs e = {MicroFour.StrataFrame.Business.NavigatedEventArgs}) Line 1384 + 0xc bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.Navigate(MicroFour.StrataFrame.Business.BusinessNavigationDirection Direction = MicroFour.StrataFrame.Business.BusinessNavigationDirection.Absolute, Integer AbsoluteIndex = 0, Object() PrimaryKeyValues = Nothing, Boolean AttemptToCheckRules = True, Boolean IsRefill = False) Line 3205 + 0x10 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.Navigate(MicroFour.StrataFrame.Business.BusinessNavigationDirection Direction = MicroFour.StrataFrame.Business.BusinessNavigationDirection.Absolute, Integer AbsoluteIndex = 0, Object() PrimaryKeyValues = Nothing) Line 3058 + 0x17 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.Navigate(MicroFour.StrataFrame.Business.BusinessNavigationDirection Direction = MicroFour.StrataFrame.Business.BusinessNavigationDirection.Absolute, Integer AbsoluteIndex = 0) Line 7108 + 0x11 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessBindingSource.CurrentChanged(Object sender = {System.Windows.Forms.CurrencyManager}, System.EventArgs e = {System.EventArgs}) Line 669 + 0x29 bytes   Basic

   [External Code]   

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessBindingSource.OnListChanged(System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) Line 123 + 0x1b bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessBindingSource.BusinessObject_IsDirtyChanged(Object sender = {JK.Inventory.Product.BusinessObject.ItemsBO}, System.EventArgs e = {System.EventArgs}) Line 705 + 0x21 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.raise_IsDirtyChanged(Object sender = {JK.Inventory.Product.BusinessObject.ItemsBO}, System.EventArgs e = {System.EventArgs}) Line 1071 + 0x21 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.OnIsDirtyChanged(Boolean DirtyShouldBe = True) Line 1086 + 0x12 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.CurrentView_ListChanged(Object sender = {System.Data.DataView}, System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) Line 2431 + 0x10 bytes   Basic

   [External Code]   

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.NewRow() Line 6312 + 0x23 bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.Add(Boolean CheckSecurity = True) Line 7610 + 0xa bytes   Basic

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.UI.Windows.Forms.BaseForm.Add(Boolean CheckSecurity = True) Line 2168 + 0xe bytes   Basic

   MicroFour StrataFrame UI.dll!MicroFour.StrataFrame.UI.Windows.Forms.MaintenanceFormToolStrip.cmdNew_Click(Object sender = {System.Windows.Forms.ToolStripButton}, System.EventArgs e = {System.EventArgs}) Line 1272 + 0x1a bytes   Basic

   [External Code]   

   MicroFour StrataFrame UI.dll!MicroFour.StrataFrame.Application.StrataFrameApplication.RunApplication() Line 220 + 0x8 bytes   Basic

   InventoryApplication.exe!JK.Inventory.Application.AppMain.Main() Line 45 + 0x6 bytes   C#

   [External Code]   





Thank you
By Bill Cunnien - 1/24/2008

Is the SubTotal property of the BO returning a null value?  I've had similar stack traces when I ran into that issue.

Bill

By Chan - 1/24/2008

Hi,

Yes, SubTotal property is null when _CurrentDataTable.Rows.Add(loRow) in BusinessLayer.NewRow(). However, I have set AllowNullOnNewRow to false so that it will call InitializeNewRow() to initialize my columns value.



Unfortunely, the error occurred before AllowNullOnNewRow checking.



Any ideas to solve it? Is it a bug? This problem not occured in prior version.



Please advice.



Thank you
By Bill Cunnien - 1/24/2008

Chan (01/24/2008)

Any ideas to solve it? Is it a bug? This problem not occured in prior version.

Hey Chan,

Not sure if this will help, but I would do one of two things in this situation to start troubleshooting.  The first relates to the Business Object Mapper.  Within it, if the subtotal field is part of you database schema, I would set the field to Return Alternate on Null...perhaps with a 0.  Second, if that does not work, I would make the subtotal a custom property of the business object and always make sure a number if returned...my default, of course, is 0.

Not sure why this issue would pop up in the current release of StrataFrame.  I suppose there could be a breaking change in there somewhere.

Hope that helps,
Bill

By Chan - 1/24/2008

Hi,

The problem just gone after I upgrade to VS 2008. Strange.



However, I hit stackoverflow exception.



   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.CurrentView_ListChanged(Object sender = {System.Data.DataView}, System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) Line 2417 + 0x3b bytes   Basic

   [Native to Managed Transition]   

   [Managed to Native Transition]   

   System.Data.dll!System.Data.DataView.OnListChanged(System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) + 0x10e bytes   

   System.Data.dll!System.Data.DataView.IndexListChanged(object sender, System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) + 0x1a bytes   

   System.Data.dll!System.Data.DataView.IndexListChangedInternal(System.ComponentModel.ListChangedEventArgs e) + 0x4b bytes   

   System.Data.dll!System.Data.DataViewListener.IndexListChanged(System.ComponentModel.ListChangedEventArgs e) + 0x3c bytes   

   System.Data.dll!System.Data.Index.OnListChanged.AnonymousMethod(System.Data.DataViewListener listener, System.ComponentModel.ListChangedEventArgs args, bool arg2, bool arg3) + 0x7 bytes   

   System.Data.dll!System.Data.Listeners.Notify(System.ComponentModel.ListChangedEventArgs arg1 = {System.ComponentModel.ListChangedEventArgs}, bool arg2 = false, bool arg3 = false, System.Data.Listeners.Action action = {Method = Cannot evaluate expression because the current thread is in a stack overflow state.}) + 0x75 bytes   

   System.Data.dll!System.Data.Index.OnListChanged(System.ComponentModel.ListChangedEventArgs e) + 0x9b bytes   

   System.Data.dll!System.Data.Index.RecordStateChanged(int oldRecord, System.Data.DataViewRowState oldOldState, System.Data.DataViewRowState oldNewState, int newRecord, System.Data.DataViewRowState newOldState, System.Data.DataViewRowState newNewState) + 0xfa bytes   

   System.Data.dll!System.Data.DataTable.RecordStateChanged(int record1 = 294, System.Data.DataViewRowState oldState1 = Added, System.Data.DataViewRowState newState1 = None, int record2 = 295, System.Data.DataViewRowState oldState2 = None, System.Data.DataViewRowState newState2 = Added) + 0x7f bytes   

   System.Data.dll!System.Data.DataTable.SetNewRecordWorker(System.Data.DataRow row = {System.Data.DataRow}, int proposedRecord, System.Data.DataRowAction action = Change, bool isInMerge, int position, bool fireEvent = true, out System.Exception deferredException = null) + 0x29d bytes   

   System.Data.dll!System.Data.DataTable.SetNewRecord(System.Data.DataRow row, int proposedRecord, System.Data.DataRowAction action, bool isInMerge, bool fireEvent) + 0x3d bytes   

   System.Data.dll!System.Data.DataRow.EndEdit() + 0x48 bytes   

   System.Data.dll!System.Data.DataRow.this[System.Data.DataColumn].set(System.Data.DataColumn column, object value) + 0xe4 bytes   

   System.Data.dll!System.Data.DataRow.this[string].set(string columnName, object value) + 0x19 bytes   

   InventoryBusinessObject.dll!JK.Inventory.Purchasing.BusinessObject.ReturnNotesBO.VendorID.set(System.Guid value = {System.Guid}) Line 452 + 0x43 bytes   C#

   InventoryBusinessObject.dll!JK.Inventory.Purchasing.BusinessObject.ReturnNotesBO.Field_VendorID_Descriptor.SetValue(object component = {JK.Inventory.Purchasing.BusinessObject.ReturnNotesBO}, object Value = {System.Guid}) Line 1217 + 0x5b bytes   C#

   System.Windows.Forms.dll!System.Windows.Forms.BindToObject.SetValue(object value) + 0x58 bytes   

   System.Windows.Forms.dll!System.Windows.Forms.Binding.PullData(bool reformat, bool force) + 0x14f bytes   

   System.Windows.Forms.dll!System.Windows.Forms.Binding.Target_PropertyChanged(object sender, System.EventArgs e) + 0x28 bytes   

   [Native to Managed Transition]   

   [Managed to Native Transition]   

   System.dll!System.ComponentModel.PropertyDescriptor.OnValueChanged(object component, System.EventArgs e) + 0x4c bytes   

   System.dll!System.ComponentModel.ReflectPropertyDescriptor.OnValueChanged(object component, System.EventArgs e) + 0x72 bytes   

   System.dll!System.ComponentModel.ReflectPropertyDescriptor.OnINotifyPropertyChanged(object component, System.ComponentModel.PropertyChangedEventArgs e) + 0x75 bytes   

   JK Framework Inherited UI.dll!JK.Framework.UI.Windows.Forms.DevEx.LookupEdit.FirePropertyChanged(string propertyName = "SelectedValue") Line 914 + 0x29 bytes   C#

   JK Framework Inherited UI.dll!JK.Framework.UI.Windows.Forms.DevEx.LookupEdit.SelectedValueChanged() Line 920 + 0xd bytes   C#

   JK Framework Inherited UI.dll!JK.Framework.UI.Windows.Forms.DevEx.LookupEdit.SelectedValue.set(object value = {System.Guid}) Line 802 + 0x7 bytes   C#

   [Native to Managed Transition]   

   [Managed to Native Transition]   

   System.dll!System.ComponentModel.ReflectPropertyDescriptor.SetValue(object component = {JK.Framework.UI.Windows.Forms.DevEx.EnhancedLookupEdit}, object value = {System.Guid}) + 0xe3 bytes   

   System.Windows.Forms.dll!System.Windows.Forms.Binding.SetPropValue(object value) + 0xc9 bytes   

   System.Windows.Forms.dll!System.Windows.Forms.Binding.PushData(bool force) + 0x71 bytes   

   System.Windows.Forms.dll!System.Windows.Forms.BindingManagerBase.PushData(out bool success = true) + 0x50 bytes   

   System.Windows.Forms.dll!System.Windows.Forms.BindingManagerBase.PushData() + 0xe bytes   

   System.Windows.Forms.dll!System.Windows.Forms.PropertyManager.OnCurrentChanged(System.EventArgs ea = {System.EventArgs}) + 0xd bytes   

   System.Windows.Forms.dll!System.Windows.Forms.BindToObject.PropValueChanged(object sender, System.EventArgs e) + 0x23 bytes   

   [Native to Managed Transition]   

   [Managed to Native Transition]   

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.CurrentView_ListChanged(Object sender = {System.Data.DataView}, System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) Line 2417 + 0x3b bytes   Basic

   [Native to Managed Transition]   

   [Managed to Native Transition]   

   System.Data.dll!System.Data.DataView.OnListChanged(System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) + 0x10e bytes   

   System.Data.dll!System.Data.DataView.IndexListChanged(object sender, System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) + 0x1a bytes   

   System.Data.dll!System.Data.DataView.IndexListChangedInternal(System.ComponentModel.ListChangedEventArgs e) + 0x4b bytes   

   System.Data.dll!System.Data.DataViewListener.IndexListChanged(System.ComponentModel.ListChangedEventArgs e) + 0x3c bytes   

   System.Data.dll!System.Data.Index.OnListChanged.AnonymousMethod(System.Data.DataViewListener listener, System.ComponentModel.ListChangedEventArgs args, bool arg2, bool arg3) + 0x7 bytes   

   System.Data.dll!System.Data.Listeners.Notify(System.ComponentModel.ListChangedEventArgs arg1 = {System.ComponentModel.ListChangedEventArgs}, bool arg2 = false, bool arg3 = false, System.Data.Listeners.Action action = {Method = Cannot evaluate expression because the current thread is in a stack overflow state.}) + 0x75 bytes   

   System.Data.dll!System.Data.Index.OnListChanged(System.ComponentModel.ListChangedEventArgs e) + 0x9b bytes   

   System.Data.dll!System.Data.Index.RecordStateChanged(int oldRecord, System.Data.DataViewRowState oldOldState, System.Data.DataViewRowState oldNewState, int newRecord, System.Data.DataViewRowState newOldState, System.Data.DataViewRowState newNewState) + 0xfa bytes   

   System.Data.dll!System.Data.DataTable.RecordStateChanged(int record1 = 293, System.Data.DataViewRowState oldState1 = Added, System.Data.DataViewRowState newState1 = None, int record2 = 294, System.Data.DataViewRowState oldState2 = None, System.Data.DataViewRowState newState2 = Added) + 0x7f bytes   

   System.Data.dll!System.Data.DataTable.SetNewRecordWorker(System.Data.DataRow row = {System.Data.DataRow}, int proposedRecord, System.Data.DataRowAction action = Change, bool isInMerge, int position, bool fireEvent = true, out System.Exception deferredException = null) + 0x29d bytes   

   System.Data.dll!System.Data.DataTable.SetNewRecord(System.Data.DataRow row, int proposedRecord, System.Data.DataRowAction action, bool isInMerge, bool fireEvent) + 0x3d bytes   

   System.Data.dll!System.Data.DataRow.EndEdit() + 0x48 bytes   

   System.Data.dll!System.Data.DataRow.this[System.Data.DataColumn].set(System.Data.DataColumn column, object value) + 0xe4 bytes   

   System.Data.dll!System.Data.DataRow.this[string].set(string columnName, object value) + 0x19 bytes   

   InventoryBusinessObject.dll!JK.Inventory.Purchasing.BusinessObject.ReturnNotesBO.VendorID.set(System.Guid value = {System.Guid}) Line 452 + 0x43 bytes   C#

   InventoryBusinessObject.dll!JK.Inventory.Purchasing.BusinessObject.ReturnNotesBO.Field_VendorID_Descriptor.SetValue(object component = {JK.Inventory.Purchasing.BusinessObject.ReturnNotesBO}, object Value = {System.Guid}) Line 1217 + 0x5b bytes   C#

   System.Windows.Forms.dll!System.Windows.Forms.BindToObject.SetValue(object value) + 0x58 bytes   

   System.Windows.Forms.dll!System.Windows.Forms.Binding.PullData(bool reformat, bool force) + 0x14f bytes   

   System.Windows.Forms.dll!System.Windows.Forms.Binding.Target_PropertyChanged(object sender, System.EventArgs e) + 0x28 bytes   

   [Native to Managed Transition]   

   [Managed to Native Transition]   

   System.dll!System.ComponentModel.PropertyDescriptor.OnValueChanged(object component, System.EventArgs e) + 0x4c bytes   

   System.dll!System.ComponentModel.ReflectPropertyDescriptor.OnValueChanged(object component, System.EventArgs e) + 0x72 bytes   

   System.dll!System.ComponentModel.ReflectPropertyDescriptor.OnINotifyPropertyChanged(object component, System.ComponentModel.PropertyChangedEventArgs e) + 0x75 bytes   

>   JK Framework Inherited UI.dll!JK.Framework.UI.Windows.Forms.DevEx.LookupEdit.FirePropertyChanged(string propertyName = "SelectedValue") Line 914 + 0x29 bytes   C#

   JK Framework Inherited UI.dll!JK.Framework.UI.Windows.Forms.DevEx.LookupEdit.SelectedValueChanged() Line 920 + 0xd bytes   C#

   JK Framework Inherited UI.dll!JK.Framework.UI.Windows.Forms.DevEx.LookupEdit.SelectedValue.set(object value = {System.Guid}) Line 802 + 0x7 bytes   C#

   [Native to Managed Transition]   

   [Managed to Native Transition]   

   System.dll!System.ComponentModel.ReflectPropertyDescriptor.SetValue(object component = {JK.Framework.UI.Windows.Forms.DevEx.EnhancedLookupEdit}, object value = {System.Guid}) + 0xe3 bytes   

   System.Windows.Forms.dll!System.Windows.Forms.Binding.SetPropValue(object value) + 0xc9 bytes   

   System.Windows.Forms.dll!System.Windows.Forms.Binding.PushData(bool force) + 0x71 bytes   

   System.Windows.Forms.dll!System.Windows.Forms.BindingManagerBase.PushData(out bool success = true) + 0x50 bytes   

   System.Windows.Forms.dll!System.Windows.Forms.BindingManagerBase.PushData() + 0xe bytes   

   System.Windows.Forms.dll!System.Windows.Forms.PropertyManager.OnCurrentChanged(System.EventArgs ea = {System.EventArgs}) + 0xd bytes   

   System.Windows.Forms.dll!System.Windows.Forms.BindToObject.PropValueChanged(object sender, System.EventArgs e) + 0x23 bytes   

   [Native to Managed Transition]   

   [Managed to Native Transition]   

   MicroFour StrataFrame Business.dll!MicroFour.StrataFrame.Business.BusinessLayer.CurrentView_ListChanged(Object sender = {System.Data.DataView}, System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) Line 2417 + 0x3b bytes   Basic

   [Native to Managed Transition]   

   [Managed to Native Transition]   

   System.Data.dll!System.Data.DataView.OnListChanged(System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) + 0x10e bytes   

   System.Data.dll!System.Data.DataView.IndexListChanged(object sender, System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) + 0x1a bytes   

   System.Data.dll!System.Data.DataView.IndexListChangedInternal(System.ComponentModel.ListChangedEventArgs e) + 0x4b bytes   

   System.Data.dll!System.Data.DataViewListener.IndexListChanged(System.ComponentModel.ListChangedEventArgs e) + 0x3c bytes   

   System.Data.dll!System.Data.Index.OnListChanged.AnonymousMethod(System.Data.DataViewListener listener, System.ComponentModel.ListChangedEventArgs args, bool arg2, bool arg3) + 0x7 bytes   

   System.Data.dll!System.Data.Listeners.Notify(System.ComponentModel.ListChangedEventArgs arg1 = {System.ComponentModel.ListChangedEventArgs}, bool arg2 = false, bool arg3 = false, System.Data.Listeners.Action action = {Method = Cannot evaluate expression because the current thread is in a stack overflow state.}) + 0x75 bytes   

   System.Data.dll!System.Data.Index.OnListChanged(System.ComponentModel.ListChangedEventArgs e) + 0x9b bytes   

   System.Data.dll!System.Data.Index.RecordStateChanged(int oldRecord, System.Data.DataViewRowState oldOldState, System.Data.DataViewRowState oldNewState, int newRecord, System.Data.DataViewRowState newOldState, System.Data.DataViewRowState newNewState) + 0xfa bytes   

   System.Data.dll!System.Data.DataTable.RecordStateChanged(int record1 = 292, System.Data.DataViewRowState oldState1 = Added, System.Data.DataViewRowState newState1 = None, int record2 = 293, System.Data.DataViewRowState oldState2 = None, System.Data.DataViewRowState newState2 = Added) + 0x7f bytes   

   System.Data.dll!System.Data.DataTable.SetNewRecordWorker(System.Data.DataRow row = {System.Data.DataRow}, int proposedRecord, System.Data.DataRowAction action = Change, bool isInMerge, int position, bool fireEvent = true, out System.Exception deferredException = null) + 0x29d bytes   

   System.Data.dll!System.Data.DataTable.SetNewRecord(System.Data.DataRow row, int proposedRecord, System.Data.DataRowAction action, bool isInMerge, bool fireEvent) + 0x3d bytes   





Below is my code for INotifyPropertyChanged



#region INotifyPropertyChanged Members



public event PropertyChangedEventHandler PropertyChanged;



protected bool CheckPropertyChanged(string propertyName, ref T oldValue, ref T newValue)

{

if (oldValue == null && newValue == null)

{

return false;

}



if ((oldValue == null && newValue != null) || !oldValue.Equals((T)newValue))

{

oldValue = newValue;



FirePropertyChanged(propertyName);



return true;

}



return false;

}



protected void FirePropertyChanged(string propertyName)

{

if (this.PropertyChanged != null)

{

this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

}

}



protected void SelectedValueChanged()

{

FirePropertyChanged("SelectedValue");

}



#endregion





Please advice.



Thank you
By Chan - 1/26/2008

Hi,

Just to summary the call stack posted in previous message.



I found that, once I assign value to Vendor property (internally CurrentRow["VendorID"]), it cause BusinessLayer.CurrentView_ListChanged fired. It cause .NET BindingManagerBase try to push data back to binded property. It cause recurring cycle.



Any ideas?



Thank you
By Trent L. Taylor - 1/27/2008

Chan,

The ListChanged event has not changed between the releases.  First, instead of me trying to disesct a piece of your code from above, it would be better if you could recreate this in a quick sample so I can debug this to tell you where your issue resides.  You mentioned that you have implemented the INotifyPropertyChanged event (which I think is the source of this particular problem) but where did you implement this?  I think that your implementation is raising the changed event prior to SF which could be causing the problem (an initialization issue).  Instead of posting all of the stack trace, I really need more detail about your code, where you are implementhing this logic, and get in a reproducable sample.  We have not encountered this type of behaviour anywhere else, so I think this is specific to your code.  Any additional details would be helpful.  Thanks.

By Chan - 1/28/2008

Hi,

I found the cause. I have set my BO as Form.PrimaryBusinessObject, I also have dropped a BusinessBindingSource on form which also set the same BO to its BusinessObject property.



Just FYI, the BBS is already there for long time. Just that it didn't cause problem before upgrade. Strange.



Anyway, thank you help and sorry for my mistake.



Thank you
By StrataFrame Team - 1/29/2008

No problem... I'm glad you found the source of the issue.
By Trent L. Taylor - 1/29/2008

Glad you found your problem...I didn't think that the update would have made a difference, so I am glad you got it going Smile