2012-04-12 1 views
0

Я получил это в другом постеRadioButtonList выбранное значение на 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> 

Является ли это правильный синтаксис ?? Если да, то кто-то может дать версию VB?

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

Благодаря

EDIT: Вот ссылка на этот пост: https://stackoverflow.com/a/5765930/713847

+0

что вы пытаетесь для того чтобы достигнуть –

+1

'Если (TypeOf Bind ("секс") Является ли DBNull, Ничего, Bind ("секс"))' Но я не думаю, что это работает. –

+0

Если моя хранимая процедура возвращает null для «sex», чем ничего не будет выбрано, иначе «male»/«female» будет выбран на основе возвращаемого значения Bind («sex») – SZT

ответ

1

Я абсолютно уверен, что это не будет работать, правильный перевод:

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

Почему бы не сделать это понятным способом в коде?

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 

Edit: Вы отметили, что это внутри FormView. Я покажу вам, как это сделать в событии DataBound.

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

вы правы, это не сработало. Мой radioButtonList находится внутри формы, поэтому я просто хотел использовать метод данных FormView. очевидно, если я не делаю этого, то ItemTemplate Formview не появится: @ – SZT

+1

@ user713847: Посмотрите на мой отредактированный ответ. –

2

Если добавить третий, невидимый, ListItem к контролю со значением = «» это будет обойти проблему, как нулевая оценка будет в состоянии соответствовать ей .... больше не нужно для проверки dbnull в атрибуте selectedvalue.

<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>