0

5 つのドロップダウン リストがあり、特定のドロップダウン リストで特定の値を選択すると、次のドロップダウン リストにその特定の項目が表示されないようにしようとしています。

各ドロップダウンリストのデータソースで特定のSQLクエリを使用してこれを行っています.コードは次のペーストビンリンクにあります.StackOverflowテキストボックスは何らかの理由でバグがあるためです: http://pastebin.com/gDm8MPrL

正確な理由はわかりませんが、データベースから何も表示されません。通常の「SELECT *」クエリをテストすると動作するため、接続の問題ではありません。

誰か手を貸してくれませんか?

ありがとう!

Paste Bin から貼り付けたコード

<asp:DropDownList ID="ddlHero1" runat="server" DataSourceID="ddlDataSource0"                        DataTextField="ChampName" DataValueField="ChamadpName" AutoPostBack="True">
</asp:DropDownList>
<asp:SqlDataSource ID="ddlDataSource0" runat="server" ConnectionString="<%$ ConnectionStrings:mobamanagerConnectionString%>" SelectCommand="SELECT [ChampName] FROM [Champions] WHERE Champname NOT IN (
SELECT [ChampName] FROM [Champions] WHERE Champname=@ddlHero2 
UNION 
SELECT [ChampName] FROM [Champions] WHERE Champname=@ddlHero3
UNION
SELECT [ChampName] FROM [Champions] WHERE Champname=@ddlHero4
UNION
SELECT [ChampName] FROM [Champions] WHERE Champname=@ddlHero5)">
   <SelectParameters>
        <asp:ControlParameter ControlID="ddlHero2" Name="ddlHero2" 
                                                PropertyName="SelectedValue" />
        <asp:ControlParameter ControlID="ddlHero3" Name="ddlHero3" 
                                                PropertyName="SelectedValue" />
        <asp:ControlParameter ControlID="ddlHero4" Name="ddlHero4" 
                                                PropertyName="SelectedValue" />
        <asp:ControlParameter ControlID="ddlHero5" Name="ddlHero5" 
                                                PropertyName="SelectedValue" />
   </SelectParameters>
</asp:SqlDataSource>

このプロセスは、DDL ごとに異なるクエリを使用してさらに 4 回繰り返されますが、手順は同じです。

編集: mod にコードを貼り付けてくれてありがとう!

4

1 に答える 1

0

あなたの場合、Ajaxの有無にかかわらずそれを行うことができますが、基本的に最初のリストを除くすべてのリストを AutoPostback="true" および enabled="false" にしてから、次のようなことを行います: VBのこのサンプルコード

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        'here load the first only
        'make the 2d enabled
    Else
        If ViewState("ddlHero1").ToString <> "" Then
            'get the value of the 1st from the viewstate
            'ddlHero1.selectedindex=cint(ViewState("ddlHero1").ToString)
            'make the 2nd enabled
            'bind the second
        End If
        If ViewState("ddlHero2").ToString <> "" Then
            'get the value from viewstate
            'ddlHero2.selectedindex=cint(ViewState("ddlHero2").ToString)
            'make the 3nd enabled
            'bind the 3rd
        End If
        If ViewState("ddlHero3").ToString <> "" Then
            'like the 2nd..etc
        End If
    End If
End Sub

各リストの SelectedIndexChanged イベントで、選択した値をビューステートに保存します

Protected Sub ddlHero1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlHero1.SelectedIndexChanged

    ViewState("ddlHero1") = ddlHero1.SelectedIndex.ToString
    'and the same for the other lists

End Sub
于 2012-05-26T21:18:45.970 に答える