I have created a listview control, which works OK, except that I want to make sure that one element is always selected - i.e that it never happens that no element is selected.
My problem is that if the user clicks in the listview outside of the populated rows, the previously selected element is deselected. When this happens, I would prefer the last element to be selected. When loading my form I want the first element to be selected. I have the same problem with both the "Click" event and the "SelectedIndexChanged" event. Neither are activated when clicking in the listview outside of the populated rows, yet an existing selection is cleared.
Key properties I have assigned to my listview: MultiSelect = false, HideSelection = False, and FullRowSelect = True
Private Sub ShowLinkList()
' If no companies are defined, display a dummy element, otherwise display the real links
' ----- So, read the table of links which have been defined ----
' Create a connection string
Dim connString As String = "Provider=VFPOLEDB.1;" + _
"Data Source=" & MyDataPath & ";"
Dim myConnection As OleDbConnection = New OleDbConnection
Dim strSqlQuery As String
myConnection.ConnectionString = connString
' Create a data adapter
strSqlQuery = "SELECT * FROM TaInit WHERE s200name <> '' ORDER BY TempaidID"
Dim da As OleDbDataAdapter = New OleDbDataAdapter(strSqlQuery, myConnection)
' Create a new dataset
Dim ds As DataSet = New DataSet
' Fill dataset
'--- Display the three columns ---
' Can also change the width of the columns by changing the '100' to a different value.
' The alignment can also be changed, to be right or centre aligned.
lvwCompanyLinks.Columns.Add("Co ID", 80, HorizontalAlignment.Left)
lvwCompanyLinks.Columns.Add("Company Name", 150, HorizontalAlignment.Left)
lvwCompanyLinks.Columns.Add("Target Company", 220, HorizontalAlignment.Left)
lvwCompanyLinks.MultiSelect = False
'--- Populate the rows -----
' Define variable to hold the ListItem information
' so that we can add values to the column we want to change
Dim lSingleItem As ListViewItem
' Check if any links have been defined
If .Rows.Count = 0 Then
' Indicate that we have NO links
bLinksDefined = False
' Create dummy link as no links are defined
lSingleItem = lvwCompanyLinks.Items.Add("TBA") ' Create a new line, and assign the ListItem into the variable so we can add sub items
lSingleItem.SubItems.Add("TBA") ' The first sub item for the first line
lSingleItem.SubItems.Add("TBA") ' The second sub item for the first line
' Indicate that we DO have links
bLinksDefined = True
Dim i As Integer ' Row counter
For i = 0 To .Rows.Count - 1
' Display the list of real links
lSingleItem = lvwCompanyLinks.Items.Add(.Rows(i).Item("TempaidID")) 'Create a new line, and assign the ListItem into the variable so we can add sub items
'The first sub item for the line
'The second sub item for the line
' No item is selected. Check if there is a row to select!
lvwCompanyLinks.Items(0).Selected = True
lvwCompanyLinks.Items(0).Focused = True
Private Sub lvwCompanyLinks_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvwCompanyLinks.SelectedIndexChanged
' NOTE To show that a row is selected, even when the control does not have focus,
' set HideSelection = False, and FullRowSelect = True.
' Check if a row is selected
If lvwCompanyLinks.SelectedIndices.Count = 0 Then Exit Sub
Dim lvi As ListViewItem = lvwCompanyLinks.SelectedItems(0)
MessageBox.Show(lvi.Text & " / " & lvi.SubItems(1).Text & " has been selected.")