By Chan - 1/21/2007
Hi,
Hi,
While waiting for response of one to one relationship thread, I tried to use IncludeInFormAdd, IncludeInFormDelete and etc property to achieve my goal (but I still hope someone can help on my previous posted issue). At first it works fine. But don't know why it just not working now.
I have the BO setting as below. After some debugging, I found that, BaseForm call child BO CompanyAddress.Add() before parent BO CompaniesBO.Add(). Even I set InitializationPriority.
Anyway ideas?
My topmost level BO - CompaniesBO is using PrimaryKeyIsAutoIncremented = true. My child BOs - CompanyAddress and CompanyContacts PK is composite key. Therefore, I set both PrimaryKeyIsAutoIncremented = false.
CompanyAddressBO - CompanyID, AddressTypeID
CompanyContactsBO - CompanyID, ContactTypeID
When I click on new button, I would get error
BusinessLayerException
An error occurred while retrieving the primary key from the parent business object.
BusinessLayerException
The CurrentRow could not be evaluated because the CurrentRowIndex is out of range. Business object record count: 0. CurrentRowIndex: -1.
|
By Trent L. Taylor - 1/22/2007
Is it possible for you to post a simple sample showing how you are producing this. I am not able to reproduce the behavior you have described. If possible, use the StrataFrameSample database, otherwise please provide us with a DDT package file for your structures or the MDF file for you SQL Server database. Thanks.
|
By Chan - 1/22/2007
Hi,
Please find the attached file.
It contains my source code, which has few problems. If you don't mind, please go thru also. Thank you very much.
Inventory
---------
1. Please check out CompanyMaintenance form. It demonstrates IncludeInFormAdd issue. Run "Company" from Mainform.toolbar and click new button.
2. Please check out CompanyMaintenance2 form. It demonstrates problem of drop childformdialog on user control. Run "Company2" from Mainform.toolbar and click "Country" linklabel directly.
JKFramework
------------
1. Try to drop linklabel/label control from JK.Framework.UI.Windows.Forms to SF form. VS will die.
Your help are appreciated.
|
By Chan - 1/22/2007
Hi,
Forgot to upload DDT package. Here it is.
|
By Chan - 1/22/2007
In case you need this.
Sorry for any inconvinience
|
By Trent L. Taylor - 1/23/2007
I cannot get your SQL backup to restore and I cannot use the PKG file because it is password protected. Either send me the JKInventory.MDF file or give me the password to the PKG file...or give me a PKG file without a password. Thanks.
|
By Chan - 1/23/2007
Sorry for that.
PKG is no password.
Attach JKInventory.MDF
Thank you
|
By Trent L. Taylor - 1/23/2007
Please check out CompanyMaintenance form. It demonstrates IncludeInFormAdd issue. Run "Company" from Mainform.toolbar and click new button.
You had the IncludeInFormAdd property set to True on the Companies,Addresses, and Contacts. You also had the Addresses and contacts ParentBusinessObject property set to companies. In this instance the instantiation order is not controlled and you cannot control which Add() will occur first. The InitializationPriority property is NOT respected here. In your situation, let the Companies Add() be fired through the MaintenanceFormToolstrip. In the AfterAddNew of the Coanies, add a new record to Addresses and Contacts. Please check out CompanyMaintenance2 form. It demonstrates problem of drop childformdialog on user control. Run "Company2" from Mainform.toolbar and click "Country" linklabel directly.
All you have to do is set the ParentForm property of the ChildFormDialog. this.CountryAddFormDialog.ParentForm = (MicroFour.StrataFrame.UI.Windows.Forms.BaseForm)this.ParentForm; if (this.CountryAddFormDialog.ShowDialog() == DialogResult.OK) { this.cboCountry.SelectedValue = this.countriesBO.CountryID; } So I was right whe I said that you could drop the ChildFormDialog control on the user control. You just have to set the ParentForm property. Attached is your corrected project.
|
By Chan - 1/23/2007
Hi,
Thank you for checking.
Any ideas for the issue below?
JKFramework
------------
1. Try to drop linklabel/label control from JK.Framework.UI.Windows.Forms to SF form. VS will die.
|
By Chan - 1/24/2007
hi,
I tried the "fixedInventory". FYI, it doesn't work. It still hit error unless I add these code as mentioned in other thread.
this._CompaniesBO.ChildAutoFilterOption = AutoChildFilterOptions.Off;
this._CompanyAddressBO.Filter = "";
this._CompanyContactsBO.Filter = "";
Any ideas? When should I restore the ChildAutoFilterOption, Undo/AfterSave event?
Beside, when I click new button, business rules for CompanyAddressBO and CompanyContactsBO will broken. Error providers show little icon beside my controls to complaint for blank value. How to omit this?
Thank you
|
By StrataFrame Team - 1/24/2007
To turn off the business rules checking when adding a new row, you can set the CheckCurrentRowBeforeNavigate method to False. This will prevent the business object from checking the business rules on the current row before adding a new row. Yes, the AfterUndo or AfterSave event is your best place to put the restoring of the ChildAutoFilterOption. If the Save() or Undo() is cancelled, then those events will not be fired.
|
By StrataFrame Team - 1/24/2007
Give me a few minutes to check on the link label killing VS.
|
By Chan - 1/24/2007
Hi,
I managed to do New/Undo/Save in my CompanyMaintenance form. Thank you for your help.
Now, I got another problem. I have my CompaniesBO set ChildAutoFilterOptions = MatchCurrentRow. When I launch my form, I click browse button, search and select record. My ChildBO (CompanyAddressBO and CompanyContactsBO) doesn't auto requery.
Any ideas? Do I need to requery manually?
|
By StrataFrame Team - 1/24/2007
Yes, you will need to manually requery. The ChildAutoFilterOption only cascades the row filter to the child business objects and the row filter only affects the records already in the business object. The CurrentDataTableRefilled event fires on the business object when the business object is repopulated with the results of the browse dialog. So, you can handle the CurrentDataTable filled event of the parent business object and call child.FillByParent(parent) on each of the child business objects.
|
By Chan - 1/26/2007
Hi,
Give me a few minutes to check on the link label killing VS.
May I know any status for this? Without this solved, I got to write keep duplicate my code. Thank you
|
By Trent L. Taylor - 1/26/2007
We could not reproduce this. I could not even reproduce this with your source code that you sent me the other day.
|
By Chan - 1/26/2007
Hi,
Are you dropping JK.Framework.UI.Windows.Forms.LinkLabel on to form?
Can any other SF users try this out?
Thank you
|
By Chan - 1/26/2007
Hi,
Are you using WinXP SP2?
I tried to create an user control in the same project with my linklabel subclass. VS prompted error, and mentioned it is WinXP SP2 problem.
|
By Trent L. Taylor - 1/27/2007
I am running WinXP SP2 and not having any trouble. Chan, create me another solution that has nothing in it but a subclassed LinkLabel and a form with it dropped on. This should prove two things, one, it may have something to do with you other solution, and two, if you can reproduce it in a second solution then it is hard and I should be able to reproduce it on this side using your sample.
|
By Chan - 1/27/2007
Hi,
Here is the project, which have problem mentioned.
If you still unable to reproduce it, I can arrange to let you to remotely access my laptop.
Thank you
|
By Trent L. Taylor - 1/27/2007
OK...this definitely failed and I was able to reproduce it. I see several things wrong with the solution, but I do not think this is the problem. I will look into it some more and get back with you.
|
By Trent L. Taylor - 1/27/2007
OK...here is the problem. It is the designer attribute of the StrataFrame LinkLabel. There is a designer that allows the localization of the control to be set through a form designer. This designer is in the Extensibility assembly which you are not allowed to distribute.To get around this problem, just overwrite the designer attribute on your inherited control. This way you get all of the benefits of the inheritance, you just will not have access to the form designer, which is really no big deal. Second, your application is not using a StrataFrame application. This is going to cause all kinds of problems. When you create a StrataFrame application, use the StrataFrame Application template. Attached is a sample that has a working inherited LinkLabel and a StrataFrame application. Finally, note that the System.Design reference must be added in order to access the ControlDesigner attribute.
|