2014-01-26 5 views
0

У меня есть DetailsView, который содержит несколько текстовых полей, а также DropDownList.Как ссылаться на DropDownList внутри DetailsView?

Теперь, что я хочу сделать, это написать событие SelectedIndexChanged для этого DropDownList, но моя проблема в том, что я больше не могу его использовать/ссылаюсь на него.

Если я просто поместил DropDownList прямо на форму, это не проблема, но теперь он ведется внутри DetailsView, кажется, невозможно достичь его.

Любые предложения?

Imports System 
Imports System.Web.UI 
Imports System.Web.UI.WebControls 

Protected Sub DetailsViewAvtaleInfo_PageIndexChanging1(sender As Object, e As DetailsViewPageEventArgs) Handles DetailsViewAvtaleInfo.PageIndexChanging 

    Dim DropDownListContractType As DropDownList = DirectCast(Me.DetailsViewAvtaleInfo.FindControl("DropDownListContractType"), DropDownList) 
    Dim TextBoxLeasingPriceMonth As TextBox = DirectCast(Me.DetailsViewAvtaleInfo.FindControl("TextBoxLeasingPriceMonth"), TextBox) 

    If DropDownListContractType.Text = "Kjøp" Then 
     TextBoxLeasingPriceMonth.Visible = False 
    End If 

End Sub 

Я знаю, что это не правильно, но насколько я доволен. Я хочу, чтобы бы просто написать код в следующих подразделах, но он просто не будет работать:

Protected Sub DropDownListContractType_SelectedIndexChanged(sender As Object, e As EventArgs)  Handles DropDownListContractType.SelectedIndexChanged 
    Dim TextBoxLeasingPriceMonth As TextBox = DirectCast(Me.DetailsViewAvtaleInfo.FindControl("TextBoxLeasingPriceMonth"), TextBox) 

    If DropDownListContractType.Text = "Leasing" Then 
     TextBoxLeasingPriceMonth.Visible = False 
    End If 
End Sub 
+0

«... но это просто не сработает» - будьте более конкретными. Он видит вашу раскрывающуюся папку в первой части кода или только второй? Почему бы не использовать FindControl(), чтобы получить раскрывающийся список? –

ответ

0

Вы не отправлял разметку для DropDownList, она должна быть ниже (Attached метод к событию):

<asp:DropDownList ID="DropDownListContractType" AutoPostBack="true" runat="server" OnSelectedIndexChanged="DropDownListContractType_SelectedIndexChanged">       
    <asp:ListItem Text="Kjøp" Value="2"></asp:ListItem> 
    <asp:ListItem Text="Leasing" Value="1"></asp:ListItem> 
</asp:DropDownList> 

Ваш код также есть некоторые вопросы:

  1. Должно быть DropDownList.SelectedItem.Text вместо DropDownList.Text.

  2. Вы должны лить sender в DropDownList в методе DropDownListContractType_SelectedIndexChanged.

  3. Вы должны найти NamingContainer из DropDownList в DropDownListContractType_SelectedIndexChanged методом

Если у вас есть следующий код, он должен работать:

Protected Sub DropDownListContractType_SelectedIndexChanged(sender As Object, e As EventArgs) 
    Dim DropDownListContractType As DropDownList = DirectCast(sender, DropDownList) 
    Dim TextBoxLeasingPriceMonth As TextBox = DirectCast(DropDownListContractType.NamingContainer.FindControl("TextBoxLeasingPriceMonth"), TextBox) 

    If DropDownListContractType.SelectedItem.Text = "Leasing" Then 
     TextBoxLeasingPriceMonth.Visible = False 
    End If 
End Sub 


Protected Sub DetailsViewAvtaleInfo_PageIndexChanging(sender As Object, e As DetailsViewPageEventArgs) Handles DetailsViewAvtaleInfo.PageIndexChanging 
    Dim DropDownListContractType As DropDownList = DirectCast(Me.DetailsViewAvtaleInfo.FindControl("DropDownListContractType"), DropDownList) 
    Dim TextBoxLeasingPriceMonth As TextBox = DirectCast(Me.DetailsViewAvtaleInfo.FindControl("TextBoxLeasingPriceMonth"), TextBox) 

    If DropDownListContractType.SelectedItem.Text = "Kjøp" Then 
     TextBoxLeasingPriceMonth.Visible = False 
    End If 
End Sub 

Я проверил код, указанный выше. Если у вас есть какие-либо проблемы, попробуйте скопировать/вставить разметку и код.

Вы можете скачать мой тестовый проект, чтобы сравнить его с вашим here.

Смежные вопросы