Ho scritto questa classe per intercettare l'errore di bind nel caso non esista il record

il problema e' che sostituisce il valore (value) con cod_carica (DataValueField) io invece vorrei che venisse sostituito da carica (DataTextField.
Come devo modificare la classe per risolvere il problema?

Grazie

<test:NewDropDownList ID="DropDownList3" runat="server" DataSourceID="SqlDataSource9"
SelectedValue='<%# Bind("codcas01_cir") %>'
DataTextField="carica"
DataValueField="cod_carica"
AppendDataBoundItems="true">
<asp:ListItem Value="">Seleziona Carica</asp:ListItem>
</test:NewDropDownList>

Imports Microsoft.VisualBasic
Namespace MyWebControl

Public Class NewDropDownList
Inherits DropDownList

Shadows Items As ListItemCollection

Public Overrides Property SelectedValue() As String
Get
Return MyBase.SelectedValue
End Get
Set(ByVal value As String)
Try
MyBase.Items.FindByValue(value).Selected = True
Catch ex As Exception
MyBase.Items.Insert(0, value)
MyBase.Items.FindByValue(value).Selected = True
End Try
End Set
End Property
End Class
End Namespace

synology italia
non ho capito benissimo, dove vuoi sostituire il campo relativa a DataValueFiel con quello di DataTextField?

ciao marco

p.s.

per evitare l'eccezione potresti veridicare la presenza dell'item combianando IndexOf e FindByValue

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
mi spiego meglio volevo risovere il problema che mi da il seguente esempio:

<asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="SqlDataSource9"
SelectedValue='<%# Bind("codcas01_cir") %>'
DataTextField="carica"
DataValueField="cod_carica"
AppendDataBoundItems="true">
<asp:ListItem Value="">Seleziona Carica</asp:ListItem>
</asp:DropDownList>

che funziona bene fino a che il bind punta ad un codice inesistente dando un errore


mi spiego SqlDataSource9 contiene un Tabella con i seguenti campi e contenuti:

cod_carica carica

1 carica1
2 carica2
3 carica3

il controllo asp:DropDownList visualizza i seguenti item: Seleziona Carica,carica1,carica2,carica3 e seleziona quello che ha cod_carica=codcar01_cir
e fin qui tutto ok

ma appena codcas01_cir = 5 avviene un errore perche' in SqlDataSource9 non esiste.

in questo caso vorei selezionare l'item 0 cioe' Seleziona Carica (<asp:ListItem Value="">Seleziona Carica</asp:ListItem>)

per fare questo ho usato un custom control il seguente:

Imports Microsoft.VisualBasic
Namespace MyWebControl

Public Class NewDropDownList
Inherits DropDownList

Shadows Items As ListItemCollection

Public Overrides Property SelectedValue() As String
Get
Return MyBase.SelectedValue
End Get
Set(ByVal value As String)
Try
MyBase.Items.FindByValue(value).Selected = True
Catch ex As Exception
MyBase.Items.Insert(0, value)
MyBase.Items.FindByValue(value).Selected = True
End Try
End Set
End Property
End Class
End Namespace

e cambiato il codice della pagina in

<test:NewDropDownList ID="DropDownList3" runat="server" DataSourceID="SqlDataSource9"
SelectedValue='<%# Bind("codcas01_cir") %>'
DataTextField="carica"
DataValueField="cod_carica"
AppendDataBoundItems="true">
<asp:ListItem Value="">Seleziona Carica</asp:ListItem>
</test:NewDropDownList>

se codcas01_cir = 2 test:NewDropDownList visualizza i seguenti item: 2,Seleziona Carica,carica1,carica2,carica3 e seleziona 2 invece di visualizzare:
Seleziona Carica,carica1,carica2,carica3 e selezionare carica2

synology italia
prova con questo:

Namespace MyWebControl 
    
    Public Class NewDropDownList 
        Inherits DropDownList 
        
        Shadows Items As ListItemCollection 
        
        Public Overloads Overrides Property SelectedValue() As String 
            Get 
                Return MyBase.SelectedValue 
            End Get 
            Set 
                Dim _index As Integer = Items.IndexOf(Items.FindByValue(value)) 
                
                If _index > -1 Then 
                    Items(_index).Selected = True 
                Else 
                    Items(0).Selected = True 
                    
                End If 
            End Set 
        End Property 
    End Class 
End Namespace 


intanto facciamo un passo

p.s. ho usato un traduttore da C# a VB per fare prima, potrebbero esserci delle imprecisioni

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
quando arriva qui:
Dim _index As Integer = Items.IndexOf(Items.FindByValue(value))

da errore perche items e' vuota

synology italia
prima di eseguire quel codice controlla che Items sia diversa da null

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.