Le remplissage d'un ASP.Net DropDownList à l'aide de VB.Net le codage dans le fichier code-behind

Nous avons un DropDownList dans le balisage d'un ASP.Net /VB.Net formulaire web.

Nous sommes désireux de remplir la DropDownList avec des données à partir d'un jeu de données créé à partir du DataSet designer, mais le codage que nous utilisons dans le fichier code-behind ne trouve pas la DropDownList ID à l'aide de FindControl.

Pouvez-vous vérifier mon codage et laissez-moi savoir ce que je dois faire pour obtenir la DropDownList peuplée?

Balisage de la DropDownList:

<% '-- DetailsView (Grid) for details of the GridView -- %>
<% '---------------------------------------------------- %>
<asp:DetailsView 
    ID="DetailsView" 
    runat="server" 
    AutoGenerateRows="False" 
    Height="50px" 
    Width="207px" 
    DataSourceID="SqlDataSourceDetails"
    DataKeyNames="ID"
    OnItemCommand="DetailsViewDetails_ItemCommand"
    OnDataBound="DetailsView_DataBound">

<Fields>

<asp:TemplateField HeaderText="Class:" SortExpression="ClassID">

     <EditItemTemplate>
          <asp:DropDownList ID="DropDownListClass" Runat="server"> </asp:DropDownList>

          <asp:RequiredFieldValidator ID="RequiredFieldValidatorEditDropDownListClass" runat="server" 
              ControlToValidate="DropDownListClass" 
              ErrorMessage="Please select a class." Font-Bold="True" Font-Italic="True" ForeColor="Red" 
              SetFocusOnError="True" Display="Dynamic">
          </asp:RequiredFieldValidator>
      </EditItemTemplate>

      <ItemTemplate>
          <asp:Literal ID="LiteralClass" runat="server" 
              Text='<%# FormatAsMixedCase(Eval("ClassName").ToString())%>' />
      </ItemTemplate>

      <ItemStyle ForeColor="Blue" />
 </asp:TemplateField>

 </Fields>

De codage dans le fichier code-behind:

Protected Sub DetailsView_DataBound(sender As Object, e As EventArgs)

    Dim theClassesTableAdapter As New DataSetClassesTableAdapters.ClassesTableAdapter
    Dim ddlTheDropDownList = DirectCast(FindControl("DropDownListClass"), DropDownList)

    ddlTheDropDownList.DataSource = theClassesTableAdapter.GetDataByAllClasses
    ddlTheDropDownList.DataTextField = "ClassName"
    ddlTheDropDownList.DataValueField = "ClassID"
    ddlTheDropDownList.SelectedValue = "ClassID"
    ddlTheDropDownList.DataBind()
End Sub

Balisage de la DataSouce de DetailsView:

<% '-- Datasources -- %>
<% '----------------- %>
<asp:SqlDataSource 
ID="SqlDataSourceDetails" 
runat="server" 
ConnectionString="<%$ ConnectionStrings:Knowledge Academy %>" 
DeleteCommand=
"DELETE FROM [TeacherSchedule] 
WHERE [ID] = @ID" 
InsertCommand=
"INSERT INTO [TeacherSchedule] 
([DayOfWeek], 
[Grade],
[StartTime],
[EndTime],
[ClassID]) 
VALUES (@DayOfWeek, 
@Grade, 
@StartTime, 
@EndTime,
@ClassID)" 
SelectCommand=
"SELECT        TeacherSchedule.ID, TeacherSchedule.Grade, TeacherSchedule.StartTime, TeacherSchedule.EndTime, TeacherSchedule.TeacherID, TeacherSchedule.ClassID, 
TeacherSchedule.DayOfWeek, Classes.ClassName, Teachers.Forename,  Teachers.Surname
FROM            TeacherSchedule INNER JOIN
Classes ON TeacherSchedule.ID = Classes.ID INNER JOIN
Teachers ON TeacherSchedule.ID = Teachers.ID
WHERE (TeacherSchedule.ID = @ID)" 
UpdateCommand=
"UPDATE [TeacherSchedule] 
SET [DayOfWeek] = @DayOfWeek, 
[Grade] = @Grade, 
[StartTime] = @StartTime,
[EndTime] = @EndTime,
[ClassID] = @ClassID
WHERE [ID] = @ID">
<DeleteParameters>
<asp:Parameter Name="ID" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="DayOfWeek" Type="String" />
<asp:Parameter Name="Grade" Type="String" />
<asp:Parameter Name="StartTime" Type="String" />
<asp:Parameter Name="EndTime" Type="String" />
<asp:Parameter Name="ClassID" Type="Int32" />
</InsertParameters>
<SelectParameters>
<asp:ControlParameter ControlID="GridViewSummary" Name="ID" PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="DayOfWeek" Type="String" />
<asp:Parameter Name="Grade" Type="String" />
<asp:Parameter Name="StartTime" Type="String" />
<asp:Parameter Name="EndTime" Type="String" />
<asp:Parameter Name="ClassID" Type="Int32" />
<asp:Parameter Name="ID" />
</UpdateParameters>
</asp:SqlDataSource>
Pourriez vous s'il vous plaît inclure le balisage de la grille vous sont de liaison de données, ainsi que le code dans le code-behind de lier le réel de la grille? (C'est le contrôle qui abrite en fait le TemplateField.
J'ai mis à jour le balisage pour inclure les informations. J'ai dû laisser les autres champs, car ce DetailsView a beaucoup de champs. Le contrôle DetailsView source de données est remplie à partir de l'annotation, je suis en ajoutant à l'annonce originale pour vous. Aussi de nombreuses colonnes de la source de données de balisage ont été supprimés pour économiser de l'espace sur cette page.

OriginalL'auteur Emad-ud-deen | 2012-12-04