table: SelectionChanged() and SelectedRow

stbi

Member
Licensed User
Longtime User
Situation:
I have a form with an empty table. Then I populate the table with a few data rows from a CSV file. No table cell is selected after filling the table.
When I now call table1.SelectedRow the result is 0 :confused: ... so I don't know wether no cell was selected so far or wether the first row was really selected.
But I am a clever one :sign0137: ... I defined a global var named actualRow and an SelectionChanged-event:
Sub Globals
actualRow = -1
End Sub
Sub TableEinheiten_SelectionChanged (ColName, Row)
aktRow = Row
End Sub
So I'm able to check an explicit cell selection .

Problem:
This works only for the first time. After the cell selection is handled by the program I can reset actualRow to -1 but I can't deselect the cell.
And if the user taps on the table header or elsewhere outside the table and deselects the cell, I have no event to get noticed about deselection.
:sign0085:

It would be useful if SelectedRow and SelectedCol would return -1 if no cell is actually selected.

Edit: table1.Refresh or table1.SelectCell("col1", -1) don't deselect.
 
Last edited:

RandomCoder

Well-Known Member
Licensed User
Longtime User
I think but am not sure that all is needed is to move the focus onto a different control.
You could possibly try moving the focus onto the Form.

Please let me know if this works.

Thanks,
RandomCoder
 

stbi

Member
Licensed User
Longtime User
I think but am not sure that all is needed is to move the focus onto a different control. You could possibly try moving the focus onto the Form.
Moving the focus to another control works, but moving the focus to the form doesn't work. The control must be visible, if you want an unvisible control you can use a button with size 0,0. One disadvantage remains: if the user selects the same row and taps the same cell, the SelectionChanged-event is not fired (because really nothing changed).

I found another solution: SelectCell() to an invisible (colwidth=0) cell in the first row. So every tap on a cell fires the SelectionChanged-event.

But thank you RandomCoder, your tip led me back on track :)

@dzt: thank you, too! I didn't test your solution because I had a bad feeling about deleting master data. And I presume that cell slection will remain active.
 

dzt

Active Member
Licensed User
Well I think that,

moving the focus to another control even with width and height=0 doesn't remove the selection from table control (just removes the focus)

making a length=0 cell prevents it from beeing selected by the stylus, but doesn't prevents it from beeing selected by the arrow keys.

Not very sure for the above

Regards
 

willisgt

Active Member
Licensed User
stbi, I'm having a small problem with this solution.

I create a table, create the columns, and assign the cell values one row at a time. Finally, I try a SelectCell(), and get the error:

'CurrentCell could not be set at this time. Moving your code to the Form.Load event should solve this problem.'

Any ideas?

Gary
 

alfcen

Well-Known Member
Licensed User
Longtime User
Hi willisgt

I eliminate this error message by using SelectCell after Form.Show (the form that contains the table). Example:

B4X:
Sub mnuSetting_Click
  If tblCity.RowCount < 1 Then
    tblCity.LoadCSV("citylist.csv",",",true,true)
    tblCity.ColWidth(tblCity.Colname(0))=tblCity.Width / 2 - 10
    tblCity.ColWidth(tblCity.Colname(1))=tblCity.Width / 2 - 10
    tblCity.ColWidth(tblCity.Colname(2))=0
    tblCity.ColWidth(tblCity.Colname(3))=0
    tblCity.ColWidth(tblCity.Colname(4))=0
  End If
  frmSetting.Show
  tblCity.SelectCell(tblCity.ColName(0),lastcity)
End Sub
 
Top