Using SeekByPrimaryKey


Author
Message
Bill Cunnien
Bill Cunnien
StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)
Group: Forum Members
Posts: 785, Visits: 3.6K
I am attempting to edit/save (aka update) selected BO's represented on a grid. Here is the code that I am using to accomplish this seemingly easy task:





waitWindow1.Message = "Updating the following parts . . . \r";

waitWindow1.ShowWaitWindow();

int[] mRows = gridView1.GetSelectedRows();

for (int i = 0; i < gridView1.SelectedRowsCount; i++)

{

int mPartIndex = (int)gridView1.GetRowCellValue(mRows[i], "partindex");

if (partsBO1.SeekToPrimaryKey(mPartIndex))

{

waitWindow1.Message += partsBO1.partnum + "\r";

partsBO1.Edit();

if (chkProdAppend.Checked) { partsBO1.prodnotes += txtNewNote.Text; }

if (chkProdReplace.Checked) { partsBO1.prodnotes = txtNewNote.Text; }

if (chkShipAppend.Checked) { partsBO1.shipnotes += txtNewNote.Text; }

if (chkShipReplace.Checked) { partsBO1.shipnotes = txtNewNote.Text; }

partsBO1.Save();

}

}

waitWindow1.HideWaitWindow();





The result of this code is that only the first and last record are updated. All other selected parts in between are ignored. Each part number shows up in the WaitWindow as I cycle through the selected records; however, only the first and last records are actually persisted to the database.



Blink



Any ideas?



Thanks,

Bill

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: 6.9K
OK, there can be a number of things going on here. First, you are using a grid and trying to seek within grid events...thins can get hairy because the grid ultimately wants control. the ONLY way this can happen...seriously...the ONLY way is if the BO is navigated to these records. So one of the following this is going on:



1. The grid is navigating to these records when when getting the values.

2. You have a sort or filter applied (or the grid is applying one)

3. The planets are beginning to align for a total eclipse! BigGrin



Possible Resolutions or Debugging Ideas:



1. Remove any filters and/or sorts

2. Put a break point in the navigating event of the BO and then look at the call stack to see what is navigating the BO.

3. USE A LISTVIEW BigGrin In this particular screen shot, I see no reason for the grid. Grids are fat and have a ton of overhead. When just displaying row elements that are maintained OUTSIDE of the grid, you are asking for trouble. Just my 2 cents! Smile
Bill Cunnien
Bill Cunnien
StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)
Group: Forum Members
Posts: 785, Visits: 3.6K
3. The planets are beginning to align for a total eclipse!




That's it!!! BigGrin



I'll start by replacing the grid with a list. We'll see what happens after that. Thanks (as always) for the tip!



Bill
Bill Cunnien
Bill Cunnien
StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)
Group: Forum Members
Posts: 785, Visits: 3.6K
Ok. The ListView displays the data from a query within its own assigned business object. I can even copy the data from the form's business object after the current data table is refilled. That work nicely to pick up the browse dialog's search results. But I need the list to directly reflect the business object on the form and to navigate the business object when the pointer changes on the ListView. I do not see how to get these two items to work in tandem. Also, even though I have set the ListView to multi-select, only one row at a time can be selected.
Bill Cunnien
Bill Cunnien
StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)
Group: Forum Members
Posts: 785, Visits: 3.6K
AutoNavigateToSelectedRecord



Setting this to true did the trick of synchronizing the list to the BO.



Now, I just need to get the multi-select feature to work.
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: 6.9K
You will have to set the MultiSelect property to true in code. It is overwritten by the default class (to resolve other issues fought in the past). So after the OnLoad, set this and you should be good.
Bill Cunnien
Bill Cunnien
StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)
Group: Forum Members
Posts: 785, Visits: 3.6K
Yepper...that was the ticket.



So far, we have replaced that fat grid with a thin list. The list is playing nicely with the BO on the form and I can multi-select the items on the list.



Now, when I rifle through the selected items and try to seek to that record...the edit/save routine does not work. The wait window displays the selected parts (see code above), but does not actually persist my change.



Still at square one. But, I did learn some things.
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: 6.9K
What does your code look like now? Also, why are you calling edit? As you as you make a change the BO will become dirty. So there is really no need to place the BO in edit mode.
Bill Cunnien
Bill Cunnien
StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)
Group: Forum Members
Posts: 785, Visits: 3.6K
Here's the code...I did take out the Edit(). I am now testing without it. I'll let you know if that changes anything.





for (int i = 0; i < listPartNum.SelectedItems.Count; i++)

{

int mPartIndex = (int)listPartNum.SelectedItems[i].Tag;

if (partsBO1.SeekToPrimaryKey(mPartIndex))

{

waitWindow1.Message += partsBO1.partnum + "\r";

if (chkProdAppend.Checked) { partsBO1.prodnotes += txtNewNote.Text; }

if (chkProdReplace.Checked) { partsBO1.prodnotes = txtNewNote.Text; }

if (chkShipAppend.Checked) { partsBO1.shipnotes += txtNewNote.Text; }

if (chkShipReplace.Checked) { partsBO1.shipnotes = txtNewNote.Text; }

partsBO1.Save();

}

}


Bill Cunnien
Bill Cunnien
StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)
Group: Forum Members
Posts: 785, Visits: 3.6K
If I select the first four in the list...only the first one is persisted.

If I pick the second through the fourth...only the second one (first in my selected items) is persisted.



I have got to take off. I'll try to check in later today to see if I can try working on this again.
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: 6.9K
First, I would use a foreach. I would do something more like this:



foreach(ListViewItem i in listPartNum.SelectedItems)

{

//-- Find the item

if(!partsBO1.SeekToPrimaryKey((int)i.Tag)) { continue; }



//-- Update the record

if (chkProdAppend.Checked) { partsBO1.prodnotes += txtNewNote.Text; }

if (chkProdReplace.Checked) { partsBO1.prodnotes = txtNewNote.Text; }

if (chkShipAppend.Checked) { partsBO1.shipnotes += txtNewNote.Text; }

if (chkShipReplace.Checked) { partsBO1.shipnotes = txtNewNote.Text; }

}



//-- Save outside of the loop

partsBO1.Save();




Edhy Rijo
E
StrataFrame VIP (6.4K reputation)StrataFrame VIP (6.4K reputation)StrataFrame VIP (6.4K reputation)StrataFrame VIP (6.4K reputation)StrataFrame VIP (6.4K reputation)StrataFrame VIP (6.4K reputation)StrataFrame VIP (6.4K reputation)StrataFrame VIP (6.4K reputation)StrataFrame VIP (6.4K reputation)
Group: StrataFrame Users
Posts: 2.4K, Visits: 23K
Hi Bill,



Adding to Trent's reply, I have a this suggestion:



1- I use the ListView extensively, and in your case, I would use the ListView.Checked property instead of MultiSelect, with this you will have better control on what records are currently checked since the list view has a collection for it, and it will be easier for the End User to just click the box or double click the record to check it. (See attached screenshoot)





If Me.lstTransactionItems.CheckedItems.Count > 0 Then

For Each listItem As ListViewItem In Me.lstTransactionItems.Items

If listItem.Checked Then

If Me.BizTransactionItemsForListView.SeekToPrimaryKey(listItem.Tag) Then

Me.BizTransactionItemsForListView.DeleteCurrentRow(True)

End If

End If

Next

Me.lstTransactionItems.Requery()

End If





As you can see, in my case I am deleting the current row, but you'll get the idea, and of course my code is in VB w00t

Edhy Rijo

Attachments
CheckedListView.png (136 views, 59.00 KB)
Bill Cunnien
Bill Cunnien
StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)
Group: Forum Members
Posts: 785, Visits: 3.6K
Hi Edhy,



I did try using the checked property; however, the user loses the range select (click, shift-click) option. The user would prefer to do that than click 30+ checkboxes. Tongue



Trent, I tried that code, but I am getting the same results. Only the first record is getting persisted; however, all selected items are being seeked because the part number shows up in the wait window perfectly.



I am tackling this again today. After a really nice weekend, hopefully, I'll be able to conquer this pesky little issue.



Thanks!!

Ling
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: 6.9K
Then there has to be something either set within your BO or some other logic moving the CurrentRowIndex because I have done this repeatedly. You are welcome to supply a sample, but I know that this will work as it is a common piece of logic.
Bill Cunnien
Bill Cunnien
StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)StrataFrame VIP (1.2K reputation)
Group: Forum Members
Posts: 785, Visits: 3.6K
There was other logic resetting CheckButton. Whistling I discovered that and replaced the CheckButtons with a RadioGroup (a little cleaner). I was able to remove all of my extra fancy code to manage the checkbuttons and now the form works as expected. It is clean and fast! w00t Thanks for all the help!!



Have a great day! Smooooth

Bill
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: 6.9K
Glad you got to the bottom of it! Smile
GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Threaded View
Threaded View
Bill Cunnien - 16 Years Ago
Edhy Rijo - 16 Years Ago
Bill Cunnien - 16 Years Ago
Bill Cunnien - 16 Years Ago
Trent L. Taylor - 16 Years Ago
                         [quote]3. The planets are beginning to align for a total...
Bill Cunnien - 16 Years Ago
                             Ok. The ListView displays the data from a query within its own...
Bill Cunnien - 16 Years Ago
                                 AutoNavigateToSelectedRecord

Setting this to true did the...
Bill Cunnien - 16 Years Ago
                                     You will have to set the MultiSelect property to true in code. It is...
Trent L. Taylor - 16 Years Ago
                                         Yepper...that was the ticket.

So far, we have replaced that...
Bill Cunnien - 16 Years Ago
                                             What does your code look like now? Also, why are you calling edit?...
Trent L. Taylor - 16 Years Ago
                                                 Here's the code...I did take out the Edit(). I am now testing without...
Bill Cunnien - 16 Years Ago
                                                     If I select the first four in the list...only the first one is...
Bill Cunnien - 16 Years Ago
                                                     First, I would use a foreach. I would do something more like this:...
Trent L. Taylor - 16 Years Ago
                                                         Hi Bill,

Adding to Trent's reply, I have a this suggestion:...
Edhy Rijo - 16 Years Ago
                                                             Hi Edhy,

I did try using the checked property; however, the...
Bill Cunnien - 16 Years Ago
                                                                 Then there has to be something either set within your BO or some other...
Trent L. Taylor - 16 Years Ago
                                                                     There was other logic resetting CheckButton. :Whistling: I...
Bill Cunnien - 16 Years Ago
                                                                         Glad you got to the bottom of it! :)
Trent L. Taylor - 16 Years Ago

Similar Topics

Reading This Topic

Login

Explore
Messages
Mentions
Search