2011-01-05 6 views
4

私は本当にあなたがこれで私を助けてくれることを願っています。私は過去2日間それを理解しようと努力しました。私はコンピュータを窓から投げ捨てようとしていると思います。ここで最初に:ドロップダウンリストの項目が重複しています!

2つのドロップダウンリストを持つWebページを設計しています.1つは車のメイク、もう1つはモデル、別々のSQLDataSourcesを持つデータベースにバインドされています。 appendDataBoundItems = trueを設定し、allという名前の項目を追加することで、両方の上部に「All」を追加します。次に、クエリーストリングでMakeを塗りつぶすと、すべてのモデルアイテムが2回追加されます(ただし、データバインドされたアイテムのみ)。ここで

は私のコードです:

<asp:DropDownList ID="DropDownMake" runat="server" 
     DataSourceID="SqlMakes" DataTextField="Make" DataValueField="Make" 
     AppendDataBoundItems="True" EnableViewState="False" AutoPostBack="True"> 
     <asp:ListItem Selected="True" Value="All">All</asp:ListItem> 
    </asp:DropDownList> 
    <asp:DropDownList ID="DropDownModel" runat="server" 
     AppendDataBoundItems="True" AutoPostBack="True" DataSourceID="SqlModels" 
     DataTextField="Model" DataValueField="Model" EnableViewState="False"> 
     <asp:ListItem>All</asp:ListItem> 
    </asp:DropDownList> 
    <asp:SqlDataSource ID="SqlMakes" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
     SelectCommand="SELECT DISTINCT [Make] FROM [Parts]"> 
    </asp:SqlDataSource> 
    <asp:SqlDataSource ID="SqlModels" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 


     SelectCommand="SELECT DISTINCT [Model] FROM [Parts] WHERE ([Make] = @Make)"> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="DropDownMake" Name="Make" 
       PropertyName="SelectedValue" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 

「とVBファイルに:私はライン "DropDownMake.SelectedValue =場合、Request.QueryString(" 作る ")を" 削除した場合

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 
    DropDownMake.SelectedValue = Request.QueryString("Make") 
    DropDownModel.SelectedValue = Request.QueryString("Model") 
End Sub 

それはdoesntのもはや複製を生成する。何が起こっている??私はiPhoneアプリ全体の開発にもっと時間を費やしたと誓っています。もし誰かがこれを理解する助けをすれば、私はあなたのために賞を授けなければならないと思います。

ありがとうございました!

+0

をポストバックない内にコードを入れてはSelectedValueのプロパティを設定する前に、Page_Initイベントのすべてのドロップダウンをクリアしてみてください。 – Laserson

答えて

6

あなたのデータバインド方法は2回発生する可能性があります。 appendDataBoundItems=falseを設定して、OnDataBoundイベントのイベントハンドラをアタッチして、代わりにイベントハンドラにトップアイテムを挿入しようとしましたか?

protected void yourDdlControl_DataBound(object sender, EventArgs e) 
{ 
    if (yourDdlControl.Items.Count > 0) 
    { 
      yourDdlControl.Items.Insert(0, "All"); 
      yourDdlControl.Items[0].Value = ""; 
      yourDdlControl.SelectedIndex = 0; 
     } 
    } 
} 

これはC#コードですが、翻訳できるはずです。:)代わりに、クエリパラメータの存在に基づいてDataBoundに選択した値を設定することもできます。

1

すなわち

If Not Page.IsPostBack Then 
    DropDownMake.SelectedValue = Request.QueryString("Make") 
    DropDownModel.SelectedValue = Request.QueryString("Model") 
End If 
関連する問題