簡體   English   中英

在ASP.NET DetailsView模板控件中實現級聯DropDownList綁定

[英]Implementing cascading DropDownList binding in a asp.net detailsview templated control

我在asp.net detailview中有兩個下拉列表“ PlantingHatchery”和“ CatalogNames”。 第一個的結果確定第二個的值。 第一個可以很好地填充,但第二個則不能。 我看過嘗試了一些建議,但沒有一個對我有用。 我要去哪里錯了?

以下是相關代碼:

 <asp:DetailsView ID="dvSMasterCurrentYear" runat="server" AutoGenerateRows="False" align="center" DataKeyNames="SMasterid" DataSourceID="SqlDataSource1" 
        Height="50px" Width="437px" AutoGenerateInsertButton="True" AllowPaging="True" insertcommand =" Insert Into [SMasterCurrentYear}
        ([HatcheryCodePlant],[CatalogNo],[DataPlant],[TimePlant],[SpeciesCode],[BroodYear],[SizeCode],[MethodCode],[Length], [PoundFish],[NumberPlanted],[NumberPerLB],[HaulMort],
        [License], [ActSites], [HatcheryCodeRear],[Comments],[H20Temp],[ConsOfficer],[TankTemp],[Marks],[Raceway])
        Values (@HatcheryCodePlant, @CatalogNum, @DataPlant, @TimePlant, @SpeciesCode, @BroodYear, @SizeCode, @MethodCode, @Length, @PoundFish, @NumberPlanted, @NumberPerLB, 
        @HaulMort, @License, @ActSites, @HatcheryCodeRear, @Comments, @H20Temp, @ConsOfficer, @TankTemp, @Marks, @Raceway) " Font-Bold="True" BackColor="#FFCC99" Font-Size="Medium" DefaultMode="Insert">
        <AlternatingRowStyle BackColor="#99FFCC" />

enter code here

              <asp:TemplateField HeaderText="Planting Hatchery">
                    <ItemTemplate>
                        <asp:Label ID="lblPlantHatch" runat="server" Text='<%# Eval("HatcheryCodePlant")%>' Visible = "true"></asp:Label>
                    </ItemTemplate>
                   <insertItemTemplate>
                        <asp:DropDownList ID="ddPlantingHatchery" runat="server" DataSource='<%# GetPlantingHatchery()%>' 
                        DataTextField="HatcheryNamePlant" DataValueField="HatcheryCodePlant" width= "150" AppendDataBoundItems="true"> 
                       <asp:ListItem Text="Select" Value="" />
                    </asp:DropDownList>
                 </insertItemTemplate>
<asp:TemplateField HeaderText="Water Body Name">
                   <ItemTemplate>
                    <asp:Label ID="lblStreamName" runat="server" Text='<%# Eval("CatalogNo")%>' Visible = "true"></asp:Label>
                </ItemTemplate>
                 <insertItemTemplate>
                    <asp:DropDownList ID="ddCatalogName" runat="server" DataSource='<%# GetCatalogNames()%>' 
                        DataTextField="StreamName" DataValueField="CatalogNo" AppendDataBoundItems="true"> 
                       <asp:ListItem Text="Select" Value="" />
                    </asp:DropDownList>
                       <asp:ObjectDataSource ID="dsWaterBody" runat="server" TypeName="StreamName"
                        SelectMethod="GetCatalogNames">
                        <SelectParameters>
                            <%--<asp:Parameter Name="HatcheryCodetName"  Type="string" />--%>
                            <asp:ControlParameter Name="HatcheryCodePlant" Type="Int32" ControlID="ddPlantingHatchery" PropertyName="SelectedValue"/>
                        </SelectParameters>
                    </asp:ObjectDataSource>
                </insertItemTemplate>enter code here

背后的代碼:

私有子DetailsDetail1_ItemInserting(作為對象發送,作為DetailsViewInsertEventArgs發送)處理dvSMasterCurrentYear.ItemInserting

昏暗的ddPlantHatch作為DropDownList = TryCast(view.FindControl(“ ddPlantingHatchery”),DropDownList)e.Values.Add(“ HatcheryCodePlant”,ddPlantHatch.SelectedValue)

Dim ddCatNum作為DropDownList = TryCast(view.FindControl(“ ddCatalogName”),DropDownList)e.Values(“ HatcheryCodePlant”)= DirectCast(DirectCast(sender,DetailsView).FindControl(“ ddPlantingHatchery”),DropDownList).SelectedValue

謝謝

只要您的GetCatalogNames方法正常工作,您可能要做的就是將autopostback="true"添加到您的第一個下拉列表中。

同樣,您的codebehind方法在ItemInserting期間觸發,在這種情況下,這是默認值。 但是您可能不需要它。

如果這不起作用,則應將您的方法設置為觸發第一個下拉列表的OnSelectedIndexChanged 去做這個:

將此添加到您的第一個下拉列表中:

    <asp:DropDownList ID="ddPlantingHatchery" runat="server" DataSource='<%# GetPlantingHatchery()%>' 
                    DataTextField="HatcheryNamePlant" DataValueField="HatcheryCodePlant" width= "150" AppendDataBoundItems="true" AutoPostBack="true" OnSelectedIndexChanged="ddPlantingHatchery_indexchanged"> 
                   <asp:ListItem Text="Select" Value="" />
                </asp:DropDownList>

然后將此方法添加到CodeBehind中:

Public Sub ddPlantingHatchery_indexchanged(sender As Object, e As EventArgs)
    Dim ddCatNum As DropDownList = TryCast(dvSMasterCurrentYear.FindControl("ddCatalogName"), DropDownList)
    ddCatNum.SelectedValue = TryCast(dvSMasterCurrentYear.FindControl("ddPlantingHatchery"), DropDownList).SelectedValue
End Sub

此示例方法將簡單地將ddCatNum的SelectedValue設置為ddPlant的SelectedValue。 當然,您可以更改它以獲取您在ObjectDataSource方法中定義的值。

另一種方法:在第一個下拉列表中添加autopostback="true" ,然后更改GetCatalognames()函數以基於回傳返回不同的值,如下所示:

    Public Function GetCatalogNames() As DataSet
    If Page.IsPostBack Then
        Dim ddPlantHatch As DropDownList = TryCast(dvSMasterCurrentYear.FindControl("ddPlantingHatchery"), DropDownList)

        Dim myConnection As New SqlConnection(ConnectionString)
        Dim ad As New SqlDataAdapter("SELECT StreamName, CatalogNo, " _
                                      + "HatcheryNamePlant, HatcheryCodePlant, " _
                                      + "LLID FROM vwStockingWatersByHatchery " _
                                      + "where HatcherCodePlant = " + ddPlantHatch.SelectedValue _
                                      + " Order By StreamName", myConnection)
        Dim dsWaterBody As New DataSet()
        ad.Fill(dsWaterBody, "Catalog")
        Return dsWaterBody
    Else


        Dim myConnection As New SqlConnection(ConnectionString)
        Dim ad As New SqlDataAdapter("SELECT StreamName, CatalogNo, " _
                           + "HatcheryNamePlant, HatcheryCodePlant, " _
                           + "LLID FROM vwStockingWatersByHatchery " _

                           + "Order By StreamName", myConnection)
        Dim dsWaterBody As New DataSet()
        ad.Fill(dsWaterBody, "Catalog")
        Return dsWaterBody
    End If


End Function

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM