fbpx
× Visual Objects

Please use this forum to post questions about Visual Objects and Vulcan.NET

How to copy a Listview, changing things in the copy, keeping the original

More
11 months 2 days ago #1 by Dick
I posted this on comp.lang, got several reactions (oClone which I never heard about, a seperate function) but all change the original listview. So in case someone missed this post and knows an alternative to copy a listview just like aClone works for arrays I post it here as well:

We show a listview in a window and use that LV variable to pass to a
method to export the contents to Excel.

Now 1 client wants to see a few of these columns omiitted in the Excel
export. It is not difficult ti remove the columns
(oLVl:DeleteColumn(2) etc) but thet should not be deleted in the
'master' listview showing in the screen.

Problem is that doing this:

oLVCopy:=oLVOriginal

and then delete the columns in oLVCopy also deletes these columns in
oLVOriginal, which is apparently copied by reference.

What would be the quickets way to copy the listview in such a way that
I can still pass it after deleting the required columns to my Excel
function without changing the original listview?

Dick

Please Log in or Create an account to join the conversation.

More
11 months 2 days ago #2 by Phil Hepburn
LINQ is your friend.

Use LINQ code to operate on the original collection to make a resultant reduced (in columns) collection.

Get back to me with more specific information if you need help.

What collection have you got bound to your listview ?

Cheers,
Phil.
P.S. all of this stuff is in the free to download eNotes from the Forums documentation.

Please Log in or Create an account to join the conversation.

More
11 months 2 days ago #3 by Dick
Sorry Phil,

It was a VO question. So Linq won't help. And collections are not VO either.

I can solve it in many ways, just copying the LV without it modifying the original would costs me by far the least time.

Dick

Please Log in or Create an account to join the conversation.

More
11 months 2 days ago #4 by Chris Pyrgas
Hi Dick,

I think the quickest solution is what Franz posted in clcvo, just create an emtpy new one and copy the data you need only.

Although personally I would change the approach and not depend on a GUI item (ListView) for storing and passig the data, but use an intermediate array instead.

Chris

XSharp Development Team
chris(at)xsharp.eu

Please Log in or Create an account to join the conversation.

More
11 months 2 days ago #5 by Dick
Hello Chris,

Although personally I would change the approach and not depend on a GUI item (ListView) for storing and passing the data, but use an intermediate array instead.

You are of course right in there. I think I was so concentrated on adapting the current routine that I hardly realized it's not the best way to solve it :unsure:

One of my employees who wrote this LV->Excel years ago told me today she also wrote a function to remove columns from the multi-dimensional array we create from this LV and always use to export to Excel.

This worked nearly the same, just a bit further up in the program, and is more elegant.

Thanks for your comments!

Dick

Please Log in or Create an account to join the conversation.

More
11 months 2 days ago #6 by Chris Pyrgas
You're welcome, glad you've already got a nice solution!

Chris

XSharp Development Team
chris(at)xsharp.eu

Please Log in or Create an account to join the conversation.