2012-12-04 45 views
4

在ASP.Net/VB.Net Web窗體的標記中有一個DropDownList。在代碼隱藏文件中使用VB.Net編碼填充ASP.Net DropDownList

我們想要使用DataSet設計器創建的DataSet中的數據填充DropDownList,但我們在代碼隱藏文件中使用的編碼沒有使用FindControl查找DropDownList ID。

你可以檢查我的編碼,讓我知道我還需要做些什麼來獲得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> 

在代碼隱藏文件編碼:

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 

在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> 
+0

能否請您包括完整的標記對於你所使用的網格數據綁定,以及代碼後面的代碼綁定到實際的網格? (這是實際上包含'TemplateField'的控件, – mclark1129

+0

我更新了標記以包含信息,因爲這個DetailsView有很多字段,所以我必須省略其他字段,DetailsView數據源從標記I'爲您添加原始發佈內容,同時還刪除了DataSource標記中的許多列,以節省此發佈的空間。 –

回答

2

嘗試並填充DropDownList_Init事件處理程序中的DropDownList。

標記:

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

背後的代碼應該是這個樣子,我更習慣於使用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 
相關問題