我们在ASP.Net / VB.Net Web表单的标记中有一个DropDownList. 我们希望从DataSet设计器创建一个DataSet填充数据DropDownList的,但我们使用的代码隐藏文件的编码没有找到使用的FindControl 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>尝试在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