Stuart McLachlan
stuart at lexacorp.com.pg
Wed Feb 6 17:13:56 CST 2008
Glad it's not just me trying to get my head around .Net and data at the moment. :-)
After 15 years of Access and classic VB development, there's so much new stuff to learn
here :-(
On 6 Feb 2008 at 14:30, Gustav Brock wrote:
> Hi Stuart et al
>
> Oh my, make a note on this should you ever wish to copy data between DataSets or DataTables with method ImportRow.
>
> The secret is the value of property RowState of the individual rows. Rows read from a table have a RowState of Unchanged.
> If a row is copied to another DataSet/DataTable by method ImportRow, RowState remains Unchanged.
>
> In my code sample below, I marked rows as Modified with method SetModified.
>
> The Update method of the DataTableAdapter, which is called to write the data rows to the underlying table, is quite clever as it doesn't touch rows with RowState Unchanged.
> However, rows with RowState Modified will only be used to update existing records in the target table, thus it will not attempt to append or insert any such row.
>
> For a row to be inserted by the later Update call, it has to have RowState set to Added.
>
> So, for my code below, I have to decide if a row should update an existing record, or if it should be appended, or if it should be ignored - and then call the method SetModified or SetAdded or nothing:
>
> // Mark row as modified.
> kundeRowS.SetModified();
> or:
> // Mark row as new.
> kundeRowS.SetAdded();
>
> When I changed the code from SetModified to SetAdded and replaced the Fill method with:
>
> kundeAdapterT.Update(kunderT);
>
> all records were written to the target table.
>
> Of course, if you can write your code to add rows not using method ImportRow - with LoadDataRow or like:
>
> kunderT.Rows.Add(rowToAdd);
>
> RowState of those rows, I guess, will be switched to Added automatically.
>
> /gustav
>
>
> >>> Gustav at cactus.dk 05-02-2008 18:02 >>>
> Hi Stuart et al
>
> No there is no GUI, just code.
> I have some code like this. It add rows but will not save them to the database table:
>
> VrsSourceTableAdapters.DataTableKundeTableAdapter kundeAdapterS =
> new VrsSourceTableAdapters.DataTableKundeTableAdapter();
> VrsSource.DataTableKundeDataTable kunderS;
>
> VrsTargetTableAdapters.DataTableKundeTableAdapter kundeAdapterT =
> new VrsTargetTableAdapters.DataTableKundeTableAdapter();
> VrsTarget.DataTableKundeDataTable kunderT;
>
> kunderS = kundeAdapterS.GetDataVrsKunder();
> kunderT = kundeAdapterT.GetDataVrsKunder();
>
> foreach (VrsSource.DataTableKundeRow kundeRowS in kunderS)
> {
> Console.WriteLine("Kunde: " + kundeRowS.navn + "");
> Console.WriteLine(" Kundenr: " + kundeRowS.kundeNr + "");
> // Mark row as modified.
> kundeRowS.SetModified();
> kunderT.ImportRow(kundeRowS);
> }
>
> Console.WriteLine("s: " + kunderS.Count.ToString());
> Console.WriteLine("t: " + kunderT.Count.ToString());
>
> kundeAdapterT.FillVrsKunder(kunderT);
>
> Target table is residing in MSDE.
> Count of s returns the count of records to add.
> Count of t returns existing records + count of records to add.
>
> What am I missing?
>
> /gustav
>
>
> >>> stuart at lexacorp.com.pg 05-02-2008 00:06:55 >>>
> Do you mean have the user physically browse through the rows looking for specific records?
>
> If that is the case, I would probably go with a DatagridView bound to the source data.
> When the user selects a row (double click, highlight and click a button or whatever), read the
> row data and feed it to a TableAdapter.Insert on the target table.
>
>
> On 4 Feb 2008 at 18:41, Gustav Brock wrote:
>
> > Hi all
> >
> > I have created two tableadapters, a source and a target, and need to
> > browse through the source looking for rows and, when a row meeting
> > some conditions is found, copy this to the target. What is the best
> > method?
> >
> > /gustav
>
>
> _______________________________________________
> dba-VB mailing list
> dba-VB at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/dba-vb
> http://www.databaseadvisors.com
>