[Gambas-user] Gridview Select Multiple rows.

Michael mdavies5 at ...169...
Fri Nov 5 13:19:07 CET 2010


Sorry, this does not work. It only applies to the ListView. I do use a 
ListView elsewhere and the easiest way is simply to loop through all 
items with the .movenext function and check for "If lvw.current.selected 
or lvw.item.selected". Then add the Key to the array of items to process.

Unfortunately the GridView has no .item property. It has a .current 
property but this does not have a .selected property.

I think I will add an extra hidden column to my grid to hold a 
'Selected' flag. I can use some of your example to track the CONTROL and 
SHIFT keys to reset these flags as appropriate.
Regards
Michael
On 05/11/10 18:09, user wrote:
> Example with ListView control lswResults
>
> -----------------------------------------------
> ' Gambas class file
> PRIVATE sFileArray AS String[] = [""]
> PRIVATE iKeyArray AS Integer[] = [0]
> PRIVATE bKeyControlPressed AS Boolean = FALSE
> PRIVATE bSellectAllPressed AS Boolean = FALSE
>
>
>
> PUBLIC SUB Form_Open()
>    sFileArray.Clear 'reset private array
>    iKeyArray.Clear  'reset private array
> END
>
>
>
> PUBLIC SUB btnSelectAll_Click()
>    bSellectAllPressed = TRUE
>    lswResults.SelectAll
> END
>
>
> PUBLIC SUB lswResults_KeyRelease()
>
> IF Key.Control = TRUE THEN
>    bKeyControlPressed = FALSE
> ENDIF
>
>
> END
>
> PUBLIC SUB lswResults_KeyPress()
>
> IF Key.Control = TRUE THEN
>    bKeyControlPressed = TRUE
> ENDIF
>
> END
>
>
>
> PUBLIC SUB lswResults_Select()
>
>    DIM iKey AS Integer = 0
>    DIM sElement AS String = ""
>    DIM sFile AS String[] = [""]
>    DIM sRow AS String = ""
>    DIM iCounter AS Integer
>
>    sFile.Clear
>    sRow = Replace$(lswResults.Current.Text, "  ", "\n") 'format string
>    sFile = Split(sRow, "\n") 'split row and take only path, reject virus
> description
>
>    ' PRINT lswResults.Current.Text
>    ' PRINT sFile[0]
>
>
> 'HERE IS WHAT YOU LOOK FOR -------------------------------
>    'if user select with CTRL
> IF bKeyControlPressed = TRUE THEN
>    'check if in sFileArray there is a current selection
>    IF sFileArray.Count>  0 THEN
>    'if there is one user clicked unselect
>      IF sFileArray.Exist(sFile[0]) THEN
>    'delete entry of current selected item from sFileArray and from
> iKeyArray
>      iKey = sFileArray.Find(sFile[0]) 'find key
>      sFileArray.Delete(iKey) 'delete selection according found key
>      iKey = iKeyArray.Find(lswResults.Current.Key) 'find key for second
> array
>      iKeyArray.Delete(iKey) 'delete selection according found key
> '    lswResults.Current.Selected = FALSE
>      ELSE
>      'if there is not, add the new selection
>      sFileArray.Add(sFile[0])
>      iKeyArray.Add(lswResults.Current.Key)
>      ENDIF
>    ELSE 'add into Arrays for first time, sFileArray.Count=0
>      sFileArray.Add(sFile[0])
>      iKeyArray.Add(lswResults.Current.Key)
>    ENDIF
> ELSE IF bSellectAllPressed = TRUE THEN 'if user pressed btnSelectAll
>   sFile.Clear 'clear array
>   sFileArray.Clear
>   iKeyArray.Clear
>
>   lswResults.MoveFirst 'add all items of listview into arrays
>   FOR iCounter = 0 TO lswResults.Count - 1
>    sRow = Replace$(lswResults[lswResults.Item.Key].Text, "  ", "\n")
> 'format string
>    sFile = Split(sRow, "\n") 'split row and take only path, reject virus
> description
>    sFileArray.Add(sFile[0])
>    iKeyArray.Add(lswResults[lswResults.Item.Key].Key)
>    lswResults.MoveNext
>   NEXT
>   bSellectAllPressed = FALSE
>
> ELSE 'user makes single clicks
>    sFileArray.Clear
>    iKeyArray.Clear
>
>    sFileArray.Add(sFile[0])
>    iKeyArray.Add(lswResults.Current.Key)
>
> ENDIF
> '--------------------------------------------------------
>
>
> ' PRINT "----------------------"
> ' FOR EACH sElement IN sFileArray
> ' PRINT sElement
> ' NEXT
>
> END
>
>
> On Fri, 2010-11-05 at 15:09 +1100, Michael wrote:
>> I'm a newbie to Gambas and very impressed. Managed to solve all my
>> queries and port apps from VB. However I have one problem that has me beat:)
>> I have a GridView with Mode = Multiple and can select multiple rows;
>> either sequentially or at random. So far so good as similar to VB.
>> I want to loop through the selected items and take some action on each
>> item. eg: Delete the row.
>> I cannot find a way to read the selected row. The Gridview.Row property
>> only returns the last selected row.
>> Typically my grid may contain 1000 rows and I use this function to
>> delete old records. It would be tedious one at a time. I could get
>> around it by asking the user to enter a cutoff date or range of row
>> numbers to delete but this raises the question "What is the point of
>> having a Multiple mode attribute?"
>> Thanks
>> Mike
>>
>> ------------------------------------------------------------------------------
>> The Next 800 Companies to Lead America's Growth: New Video Whitepaper
>> David G. Thomson, author of the best-selling book "Blueprint to a
>> Billion" shares his insights and actions to help propel your
>> business during the next growth cycle. Listen Now!
>> http://p.sf.net/sfu/SAP-dev2dev
>> _______________________________________________
>> Gambas-user mailing list
>> Gambas-user at lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/gambas-user
>
>
> ------------------------------------------------------------------------------
> The Next 800 Companies to Lead America's Growth: New Video Whitepaper
> David G. Thomson, author of the best-selling book "Blueprint to a
> Billion" shares his insights and actions to help propel your
> business during the next growth cycle. Listen Now!
> http://p.sf.net/sfu/SAP-dev2dev
> _______________________________________________
> Gambas-user mailing list
> Gambas-user at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gambas-user
>
>
>




More information about the User mailing list