2

データベースから動的に入力される asp ボタンと 4 つのドロップダウン リストがあります。ボタンをクリックすると、ドロップダウン リストから選択した値が SQL ストアド プロシージャに渡されます。代わりに、選択した値ではなく、各ドロップダウン リストの最初の値が渡されます。aspx ページのコードは次のとおりです。

<asp:DropDownList runat="server" ID="ddlCountry" AppendDataBoundItems="True">
</asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlTypeStructure" AppendDataBoundItems="True">
 </asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlCategory" AppendDataBoundItems="True">
</asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlSegment" AppendDataBoundItems="True">
</asp:DropDownList>
&nbsp;
<asp:Button runat="server" ID="btnSearhProjects" Text="Go" 
    CausesValidation="False" onclick="btnSearhProjects_Click" UseSubmitBehavior="False" />

ボタンの C# コード ビハインドは次のとおりです。

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindCountries();
            BindCategories();
            BindSegments();
            BindStructures();

        }



    }
public void SearchProjects()
    {
        Project project = new Project();
        string country = ddlCountry.SelectedItem.Text;
        string category = ddlCategory.SelectedItem.Text;
        string segment = ddlSegment.SelectedItem.Text;
        string structure = ddlTypeStructure.SelectedItem.Text;
        List<Project> projectList = project.GetProjects(country, category, segment, structure);
        gvProjects.DataSource = projectList;
        gvProjects.DataBind();
    }

    protected void btnSearhProjects_Click(object sender, EventArgs e)
    {
        SearchProjects();
    }

そして、これは私が各ドロップダウンリストに入力する方法です:

public void BindCountries()
    {
        List<Country> countryList = new List<Country>();
        Country country = new Country();
        countryList = country.GetCountries();

        ddlCountry.DataTextField = "CountryName";
        ddlCountry.DataValueField = "CountryID";
        ddlCountry.DataSource = countryList;
        ddlCountry.DataBind();

    }

ddlCountry.SelectedValue.Textandを使用してみddlCountry.SelectedItem.Valueましたが、機能しません。どんな助けでも大歓迎です。ありがとうございました。

4

5 に答える 5

1

if (!IsPostBack)イベントのコード ブロックにブレークポイント (または何らかのデバッグ ステートメント) を設定しPage_Loadて、ボタンのクリック時にイベントが実行されないようにします。

またvalue、DropDownList ListItems の属性がすべて一意であることを確認してください。そうしないと、最初に重複した値に設定されます。

于 2012-12-27T20:26:24.607 に答える
0

これを行うにはいくつかの方法がありますが、これを試してみて、これが機能するかどうかを報告する簡単な答えを得ることができます。

値を ViewState またはセッション変数に格納するか、必要に応じて保護されたプロパティを作成します

データをバインドしていると仮定すると、

データがドロップダウンにバインドされた後に発生する DataBound イベントがあります。dataSource を dropwdwon に割り当てているため、ドロップダウンにバインドされたすべての行の後に選択したアイテムが必要です

var selectedValue string.Empty;
protected void DropDownList1_DataBound(object sender, EventArgs e)
{
   selectedValue = ddlCountry.SelectedValue; // store it in some variable
}

また、DropDownList の ListItem を取得し、foreach を使用してどのアイテムが選択されているかを確認することもできます。Pag​​e_Load の if (IsPostBack) でこれを行っていることを確認してください。ボタンのクリックが PostBack をトリガーすることを覚えておいてください。

foreach (ListItem item in ddlCountry.Items)
{
    if (item.Selected)
    {
        // TODO: Whatever you are doing with a selected item.
    }
}
于 2012-12-27T20:30:26.733 に答える
0

私の問題の解決策を見つけました。マスター ページに追加のフォーム タグがありましたmethod="post"。これにより、ページがそれ自体にポストバックされていました。form タグを削除すると、ドロップダウン リストを適切に使用できるようになりました。ありがとう。

于 2012-12-28T15:54:12.013 に答える
0

AppendDataBoundItems="true" を削除できます。

DropDownList AppendDataBoundItems (最初の項目は空白で重複はありません)

<asp:DropDownList runat="server" ID="ddlCountry">
</asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlTypeStructure">
 </asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlCategory">
</asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlSegment">
</asp:DropDownList>
&nbsp;
<asp:Button runat="server" ID="btnSearhProjects" Text="Go" 
    CausesValidation="False" onclick="btnSearhProjects_Click" UseSubmitBehavior="False" />
于 2012-12-27T20:34:03.173 に答える
0

問題は、ページの読み込みが実行されていないことです。これらは動的に作成されるため、ポストバックに設定されていません。

これらの値をビューステートに保存することもできますが、ページのビューステートをオフにしているようです。(ビューステートは動的ページで問題になる可能性がありますが、この問題を回避する必要があります。)

于 2012-12-27T20:28:28.390 に答える