在代码隐藏文件中使用 VB.Net 编码填充 ASP.Net DropDownList

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13710292/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-17 11:26:41  来源:igfitidea点击:

Populating an ASP.Net DropDownList using VB.Net coding in code-behind file

asp.netvb.netpopulatehtml-select

提问by Emad-ud-deen

We have a DropDownList in the markup of an ASP.Net / VB.Net web form.

我们在 ASP.Net / VB.Net Web 表单的标记中有一个 DropDownList。

We are wanting to populate the DropDownList with data from a DataSet created from the DataSet designer but the coding we are using in the code-behind file does not find the DropDownList ID using FindControl.

我们想用从数据集设计器创建的数据集中的数据填充 DropDownList,但我们在代码隐藏文件中使用的编码没有使用 FindControl 找到 DropDownList ID。

Can you check my coding and let me know what I still need to do to get the DropDownList populated?

你能检查我的编码并让我知道我还需要做什么来填充 DropDownList 吗?

Markup of the DropDownList:

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>

Coding in the code-behind file:

在代码隐藏文件中编码:

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

Markup of the DataSouce of the DetailsView:

DetailsView 的 DataSouce 的标记:

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

回答by Denki

Try and populate your DropDownList in the DropDownList_Init event handler.

尝试在 DropDownList_Init 事件处理程序中填充您的 DropDownList。

Markup:

标记:

<asp:DropDownList ID="ddlTheDropDownList" runat="server" OnInit="ddlTheDropDownList_Init">

The code behind should look something like this, I'm more used to C# but I hope you understand the point:

后面的代码应该看起来像这样,我更习惯于 C# 但我希望你明白这一点:

Protected Sub ddlTheDropDownList_Init(sender As Object, e As EventArgs)
    Dim ddl As DropDownList
    ddl = sender As DropDownList
    ddl.Datasource = theClassesTableAdapter.GetDataByAllClasses
    ddl.DataTextField = "ClassName"
    ddl.DataValueField = "ClassID"
    ddl.SelectedValue = "ClassID"
    ddl.DataBind()
End Sub