2012-04-12 7 views
0

ich dieseRadiobuttonlist ausgewählter Wert auf NULL

<asp:RadioButtonList runat=server ID="rd" SelectedValue='<%# Bind("sex").GetType() == typeof(DBNull) ? null : Bind("sex") %>' 
     <asp:ListItem Text="male" Value="1"></asp:ListItem> 
     <asp:ListItem Text="female" Value="2"></asp:ListItem> 
</asp:RadioButtonList> 

Ist dies eine korrekte Syntax in einem anderen Beitrag hätte ?? Wenn ja kann jemand bitte die VB-Version davon geben ??

SelectedValue='<%# Bind("sex").GetType() == typeof(DBNull) ? null : Bind("sex") %>' 

Dank

EDIT: Hier ist der Link zu diesem Beitrag: https://stackoverflow.com/a/5765930/713847

+0

Was sind Sie –

+1

'If (TypeOf Bind ("sex") Ist DBNull, Nix, Bind ("sex")) zu achive versuchen' Aber ich glaube nicht, dass das funktioniert. –

+0

Wenn meine Stored Procedure für "Sex" null zurückgibt, wird nichts ausgewählt, sonst wird "männlich"/"weiblich" basierend auf dem zurückgegebenen Wert von Bind ("Geschlecht") ausgewählt. – SZT

Antwort

1

ich ziemlich sicher bin, dass dies nicht funktionieren wird, die korrekte Übersetzung lautet:

If(TypeOf Bind("sex") Is DBNull, Nothing, Bind("sex"))

Warum nicht im Codebehind lesbar machen?

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not IsPostBack Then 
     Dim sex = getSexFromStoredProcedure() 
     If Not sex Is Nothing Then rd.SelectedValue = sex 
    End If 
End Sub 

bearbeiten: Sie haben kommentiert, dass es in einem FormView ist. Ich werde Ihnen zeigen, wie es im DataBound Ereignis zu tun ist.

Private Sub FormView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormView1.DataBound 
    Select Case FormView1.CurrentMode 
     Case FormViewMode.ReadOnly 
      ' adjust the DataSource accordingly if its not a DataRow ' 
      Dim row = DirectCast(FormView1.DataItem, DataRow) 
      Dim LblSex = DirectCast(FormView1.FindControl("LblSex"), Label) 
      Dim sex As String = row.Field(Of String)("Sex") 
      LblSex.Text = If(sex Is Nothing, "", sex) 

     Case FormViewMode.Edit 
      ' adjust the DataSource accordingly if its not a DataRow ' 
      Dim row As DataRow = DirectCast(FormView1.DataItem, DataRow) 
      ' assuming your RadioButtonList is inside the EditItemTemplate ' 
      Dim RblSex = DirectCast(FormView1.FindControl("RblSex"), RadioButtonList) 
      Dim sex As String = row.Field(Of String)("Sex") 
      If Not sex Is Nothing Then RblSex.SelectedValue = sex 

     Case FormViewMode.Insert 

    End Select 
End Sub 
+0

Sie haben Recht, es hat nicht funktioniert. Meine radioButtonList befindet sich in einem Formview, also wollte ich nur die datengebundene Methode von FormView verwenden anscheinend, wenn ich nicht tue, dass Formview ItemTemplate wird nicht angezeigt: @ – SZT

+1

@ user713847: Werfen Sie einen Blick auf meine bearbeitete Antwort. –

2

Wenn Sie ein drittes, unsichtbares, listitem an die Steuerung mit einem Mehrwert = „“ in dieser Runde des Problems als null Auswertung erhalten wird in der Lage, es zu entsprechen .... Sie nicht mehr benötigen um dbnull im ausgewählten value-Attribut zu testen.

<asp:RadioButtonList runat=server ID="rd" SelectedValue='<%# Bind("sex")%>' 
     <asp:ListItem Text="male" Value="1"></asp:ListItem> 
     <asp:ListItem Text="female" Value="2"></asp:ListItem> 
     <asp:ListItem Text="" Value="" style="display:none"></asp:ListItem> 
</asp:RadioButtonList>