Newsgroup: it.comp.lang.visual-basic
Titolo: VB.NET Valore nullo in ListView

Salve a tutti,
in una ListView ho degli SubItems senza valore.
Ho risolto assegnando in fase di caricamento un valore falso.
In assenza di valore , al tentativo di leggerlo , dopo la selezione della
riga , ottengo un errore.
Ho tentato:
If List.SelectedItems(0).SubItems(4).Text Is Nothing Then
Risposta: "Argomento specificato non compreso nell'intervallo"
Is Nothing  dovrebbe essere utilizzato per rilevare l'assenza di un oggetto.
Ma in .NET , discendendo tutto da System.Object ogni entità non è un oggetto
?
Con:
If Not (List.SelectedItems(0).SubItems(4).Text) Is Nothing Then
Risposta: "Argomento specificato non compreso nell'intervallo"
Con:
If IsDBNull(List.SelectedItems(0).SubItems(4).Text) Then
Risposta: "Argomento specificato non compreso nell'intervallo"
Con:
If Len(List.SelectedItems(0).SubItems(4).Text) < 1 Then
Risposta: "Argomento specificato non compreso nell'intervallo"
Con:
If IsError(List.SelectedItems(0).SubItems(4).Text) Then
Risposta: "Argomento specificato non compreso nell'intervallo"
Con:
If Convert.IsDBNull(List.SelectedItems(0).SubItems(4).Text) Then
Risposta: "Argomento specificato non compreso nell'intervallo"
Con:
If CType(List.SelectedItems(0).SubItems(4).Text, System.Object) Then
Risposta: "Argomento specificato non compreso nell'intervallo"
A questo punto mi sono arreso.
Esiste un metodo ?
giuseppeD

 ha scritto

in vb6 puoi usare
    Len(LV.SelectedItem.SubItems(1))
in .net non si puo' fare
    if Len(LV.SelectedItem.SubItems(1)) = 0
?
ciao

allora, andiamo con calma......spero di non dire stupidaggini......
leggi bene l'errore che ti viene:
"Argomento specificato non compreso nell'intervallo"
questo significa che stai usando un indice che esce al di fuori dell'array
che stai usando:
List.SelectedItems(0).SubItems(4).Text
in questa riga lo 0 o il 4 non appartengono ad alcun ListItem o SubItems.
L'errore che devi ricercare č questo. Mi sembra che in .NET prima di poter
gestire un SubItem lo devi prima aggiungere.
Ti posto alcune righe di codice che ho usato io, non fanno proprio al caso
tuo. Dunque:
Dim Riga As ListViewItem
Riga = Me.lstElenco.Items.Add(b.ID)
Aggiunge una riga alla listview lstElenco e la referenzio all'oggetto Riga,
definito come:
Poi, per aggiungere un SubItem faccio:
Riga.SubItems.Add(b.RagioneSociale)
e cosě via.......
good coding!!!
DamianiLiborio Igor
--
ig...@igordamiani.it
 - 
dam...@italiainfiera.it
 - 
idam...@hotmail.com
http://www.igordamiani.it
ICQ : 11847262

 questo significa che stai usando un indice che esce al di fuori dell'array
L'indice è nell'Array
Se in fase di caricamento della Lista imposto:
  If (dt.Rows(i).Item("Data")) <> #1/1/2000# Then
              it.SubItems.Add("")
        Else
             Dim dat As DateTime = New System.DateTime()
             dat = (dt.Rows(i).Item("Data"))
             dat.ToShortDateString()
             it.SubItems.Add(dat)
    End If
Tutto funziona perchè vienne assegnato , per valori diversi dal filtro , una
stringa ""
Diverso il comportamento impostando:
If (dt.Rows(i).Item("Data")) = #1/1/2000# Then
      Dim dat As DateTime = New System.DateTime()
      dat = (dt.Rows(i).Item("Data"))
      dat.ToShortDateString()
      it.SubItems.Add(dat)
 End If
Se il valore è diverso non viene caricato nulla.
Al tentativo di lettura mi solleva una eccezione che non riesco a rilevare
da codice.
giuseppeD

Ho capito il perchč si presenta l'errore.
Se il valore da caricare nella lista č nullo , non viene considerato ma
viene aggiunto in sequenza il successivo non nullo .
Se i campi che si pensa di accodare sono 6 e due sono senza valore nella
lista si costruiscono un Item e tre SubItems.
se si prova a ricavare dalla lista i 6 valori gli ultimi due sono Nothing ,
cioč non sono stati costruiti.
L'inganno č nella inizializzazione della Lista , dove si visualizzano 6
Columns.
Se il valore nullo č nel mezzo , l'accorgimento č istantaneo , si ha una
traslazione dei valori; se il nullo č all'ultima colonna , capita ciň che č
capitato a me.
giuseppeD