Add a new table/row programmatically


Author
Message
Gerhard Jaros
Gerhard Jaros
StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)
Group: Forum Members
Posts: 18, Visits: 22
I've a dataset and want to add this data to an existing BusinessObject. The fields of the business object are exactly the same than those of my data table. How can I automatically add this data? BO.NewRow() just adds an empty row and also BO.Add()

...gerhard...

Replies
Trent Taylor
Trent Taylor
StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)
Group: StrataFrame Developers
Posts: 6.6K, Visits: 7K
Then you need to either put a debug on your data connection in the program.cs file at the bottom of the SetDataSources() method:

MicroFour.StrataFrame.Data.Databasics.DataSources(0).SetDebugOn("c:\\temp\\mydebug.html",True);

or you need to capture the ErrorSaving event of the BO and look at the event args to see if you are getting an error. 

Last, what does the Save() method return as a result.  You can use all of these to figure out where your problem is.

Gerhard Jaros
Gerhard Jaros
StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)
Group: Forum Members
Posts: 18, Visits: 22
Trent L. Taylor (10/30/2006)
Then you need to either put a debug on your data connection in the program.cs file at the bottom of the SetDataSources() method:

MicroFour.StrataFrame.Data.Databasics.DataSources(0).SetDebugOn("c:\\temp\\mydebug.html",True);.

mydebug.html is empty.

or you need to capture the ErrorSaving event of the BO and look at the event args to see if you are getting an error. 

I cannot understand what you mean with "capture the errorSaving event"

Last, what does the Save() method return as a result.  You can use all of these to figure out where your problem is.

Save returns "Success"

Trent Taylor
Trent Taylor
StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)
Group: StrataFrame Developers
Posts: 6.6K, Visits: 7K
mydebug.html is empty.

Not possible if you have the correct data source mapped.  This is not accessible until you close down your application.  You have something wired improperly it sounds like....there are at least a dozen or more things that could be going on...all of which point to something related to your data connection.  How are you setting up your data connection?

Gerhard Jaros
Gerhard Jaros
StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)
Group: Forum Members
Posts: 18, Visits: 22
Nobody on this world can ever say that you're not patient Smile

I did nothing unusual when I set up my data connection:

private static void SetDataSources()

{

// The application key:

ConnectionManager.ApplicationKey = "ChangeThisValue";

ConnectionManager.ApplicationDefaultTitle = "EKZ7 Connection";

ConnectionManager.ApplicationDefaultDescription = "This application connection is used by EKZ7";

// SQL Connection

ConnectionManager.AddRequiredDataSourceItem("", "SQL Connection",

DataSourceTypeOptions.SqlServer, "EKZ7", "This connection is used by EKZ7.");

ConnectionManager.SetConnections();

MicroFour.StrataFrame.Data.DataBasics.DataSources[0].SetDebugOn(@"c:\temp\myDebug.html", true);

}


Trent Taylor
Trent Taylor
StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)
Group: StrataFrame Developers
Posts: 6.6K, Visits: 7K
This looks OK....did you try to Save() your changes with this code in place?  Nothing is written to this file until a SELECT, DELETE, UPDATE, or INSERT is called.
Gerhard Jaros
Gerhard Jaros
StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)
Group: Forum Members
Posts: 18, Visits: 22
Yes, I use this lines of code since I work on this project and I'm quite sure that it works pretty well because it works well in lots of other parts of my app.

It really seems as if the Save() method would simply do nothing. All the data is in the CurrentDataTable() and Save() does absolutely nothing. It even does not change it's own status "Success". If I work with another part of my application, the myDebug.html file gets content. It's JUST in this point of my app.

Trent Taylor
Trent Taylor
StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)
Group: StrataFrame Developers
Posts: 6.6K, Visits: 7K
This would explain all of your other problems.  Do you have anything in the DataSourceKey property?  There is something related to this BO that is not executing the Save().  Since nothing shows up in this file, this tells us that it is not trying to use this data source connection.
Gerhard Jaros
Gerhard Jaros
StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)
Group: Forum Members
Posts: 18, Visits: 22
There is nothing in my DataSourceKey property, and if I insert data manually (with my StrataFrame form where I use the same BO) it works perfectly Smile It just doesn't work if I call the Save() method programmatically.
Trent Taylor
Trent Taylor
StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)
Group: StrataFrame Developers
Posts: 6.6K, Visits: 7K
I bet your BO is not dirty when you are copying over the data.  Look at the IsDirty property after you call the CopyDataFrom method. 

MyBO.IsDirty

If it is false, then this is your problem.  You need to place the BO in an edit state before copying the data into it. 

Basically, all ADO.NET data rows have a RowState that indicates whether or not the row is dirty and needs to be saved.  More than likely your data table has already accepted the changes which will not force a save.  You can force each row to dirty by doing the following:

loBO.CopyDataFrom(MyDataTable, MicroFour.StrataFrame.Business.BusinessCloneDataType.ClearAndFillFromDefaultView)

If loBO.MoveFirst() Then
    Do
        '-- Force a new record to be created when saved
        loBO.CurrentRow.SetAdded()
    Loop While loBO.MoveNext()
End If

loBO.Save()

Gerhard Jaros
Gerhard Jaros
StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)
Group: Forum Members
Posts: 18, Visits: 22
Trent L. Taylor (10/30/2006)
I bet your BO is not dirty when you are copying over the data. 

You won the bet BigGrin

The Copy command works fine now, there just happend one simple thing which you could maybe tell me: I have a myBO.Clear() command in the same procedure - why does this one not set myBO.IsDirty to true? Right now all the existing rows are kept and the new rows coming in from CopyTableFrom are added, and the reason is that

myBO.Clear();
myBO.Save();

doesn't work because the isDirty prop is set to false. And I couldn't find a SetDeleted() method (like the SetAdded() method before).

Thanks for your help!

Gerhard Jaros
Gerhard Jaros
StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)StrataFrame Beginner (24 reputation)
Group: Forum Members
Posts: 18, Visits: 22
Do you maybe have an answer to my question? I meanwhile tried all kinds of different delete events and they also do not set the isDirty prop to true.

Thank you very much!

...gerhard...

Trent Taylor
Trent Taylor
StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)StrataFrame Developer (14K reputation)
Group: StrataFrame Developers
Posts: 6.6K, Visits: 7K
I don't know what you are trying to accomplish.  The Clear removes any of the data within the BO and resets any flags.  Calling a Clear() and then a Save() would do literally nothing.  What are you trying to accomplish?

Just so you can better understand this, run this code:

MyBO.Clear()

MsgBox(MyBO.Count.ToString())

You will get a message box with a "0" in it.  There are no records in the BO after you call a clear...the records are not deleted, the BO is just cleared of its data.  If you want to delete all of the records in the BO, the easiest thing to do is enumerate and get all of the PKs then delete all of the PKs at once:

Dim loPKs As New System.Collections.Generics.List(Of Integer)

If MyBO.MoveFirst()
    Do
         loPKs.Add(MyBO.MyPrimaryKey)
    Loop While MyBO.MoveNext()
End If

'-- Now delete the records
For Each lnPK As Integer IN laPKs.ToArray()
    MyBO.DeleteByPrimaryKey(lnPK)
Next

You don't need to call the save because the DeleteByPrimaryKey immediately deletes the record on the server.

GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Threaded View
Threaded View
Gerhard Jaros - 19 Years Ago
Trent L. Taylor - 19 Years Ago
Gerhard Jaros - 19 Years Ago
Trent L. Taylor - 19 Years Ago
Gerhard Jaros - 19 Years Ago
                     Sorry, it doesn't append 11 empty rows, it appends nothing....
Gerhard Jaros - 19 Years Ago
                         Do you have the same structure in the data table that is populated...
Trent L. Taylor - 19 Years Ago
                             The structure is exactly the same
Gerhard Jaros - 19 Years Ago
                                 There are two things which could maybe help me: 1. Where can I find...
Gerhard Jaros - 19 Years Ago
                                 There is not a lot of rocket-science in this method :D If you debug...
Trent L. Taylor - 19 Years Ago
                                     [quote]Where can I find the source code of CopyDataFrom() in the...
Trent L. Taylor - 19 Years Ago
                                     :) this.CurrentDataTable is empty before I run CopyDataFrom and it...
Gerhard Jaros - 19 Years Ago
                                         Then you need to either put a debug on your data connection in the...
Trent L. Taylor - 19 Years Ago
                                             [quote][b]Trent L. Taylor (10/30/2006)[/b][hr]Then you need to either...
Gerhard Jaros - 19 Years Ago
                                                 [quote]mydebug.html is empty.[/quote] Not possible if you have the...
Trent L. Taylor - 19 Years Ago
                                                     Nobody on this world can ever say that you're not patient :) I did...
Gerhard Jaros - 19 Years Ago
                                                         This looks OK....did you try to Save() your changes with this code in...
Trent L. Taylor - 19 Years Ago
                                                             Yes, I use this lines of code since I work on this project and I'm...
Gerhard Jaros - 19 Years Ago
                                                                 This would explain all of your other problems. Do you have anything in...
Trent L. Taylor - 19 Years Ago
                                                                     There is nothing in my DataSourceKey property, and if I insert data...
Gerhard Jaros - 19 Years Ago
                                                                         I bet your BO is not dirty when you are copying over the data. Look at...
Trent L. Taylor - 19 Years Ago
                                                                             [quote][b]Trent L. Taylor (10/30/2006)[/b][hr]I bet your BO is not...
Gerhard Jaros - 19 Years Ago
                                                                                 Do you maybe have an answer to my question? I meanwhile tried all...
Gerhard Jaros - 19 Years Ago
                                                                                     I don't know what you are trying to accomplish. The Clear removes any...
Trent L. Taylor - 19 Years Ago
                                     :) this.CurrentDataTable is empty before I run CopyDataTable() and it...
Gerhard Jaros - 19 Years Ago

Similar Topics

Reading This Topic

Login

Explore
Messages
Mentions
Search