0

ストア プロシージャを使用してグリッドビューにデータを入力する 3 つのドロップダウン メニューがあります。選択された施設に応じて、2 番目のソース タイプのドロップダウンで異なるオプションを提供するには、最初の施設の DropDown が必要です。すべてのオプションを表示する必要がある施設もあれば、1 つまたは 2 つだけを表示する必要がある施設もあります。これについてどうすればよいかわかりません。

ドロップダウンとストア プロシージャのコードは次のとおりです。

どんな助けでも大歓迎です

private void BindGrid()
{
    //set up arguments for the stored proc
    int? FacilityID = (ddlFacility.SelectedValue.Equals("-1")) ? (int?)null : int.Parse(ddlFacility.SelectedValue);
    int? SourceTypeID = int.Parse(ddlSource.SelectedValue);
    int? StatusTypeID = int.Parse(ddlStatusType.SelectedValue);
    //bind
    ObjectResult<models.MS_spGetMatchCross_Result> ds = this.DataLayer.model.MS_spGetMatchCross(FacilityID, SourceTypeID, StatusTypeID);
    gvResults.DataSource = ds;
    gvResults.DataBind();
}

private void ResetForm()
{
    try
    {

        //facility dropdown
        ddlFacility.Items.Clear();
        ddlFacility.DataSource = this.DataLayer.model.MS_spGetFacilityInfo(null).OrderBy(x => x.FacilityName);
        ddlFacility.DataTextField = "FacilityName";
        ddlFacility.DataValueField = "FacilityID";
        ddlFacility.DataBind();
        ddlFacility.Items.Insert(0, new ListItem("Select a facility...", "-1"));

        //SourceType dropdown
        ddlSource.Items.Clear();
        ddlSource.DataSource = this.DataLayer.model.SourceTypes;
        ddlSource.DataTextField = "Description";
        ddlSource.DataValueField = "SourcetypeID";
        ddlSource.DataBind();

        //Match Status dropdown
        ddlStatusType.Items.Clear();
        ddlStatusType.DataSource = this.DataLayer.model.StatusTypes;
        ddlStatusType.DataTextField = "Description";
        ddlStatusType.DataValueField = "StatusTypeID";
        ddlStatusType.DataBind();

        BindGrid();
    }
    catch (Exception ex)
    {
        this.SetMessage(ex.ToString(), PageMessageType.Error);
        AISLogger.WriteException(ex);
    }
}
4

1 に答える 1

1

非常に簡単ですが、厳密には洗練されていませんが、DropDownList の OnSelectedIndexChanged イベントを処理する方法があります。これが機能するには、その選択が別の DDL のコンテンツに影響を与える各 DDL が AutoPostBack プロパティを true に設定していることを確認する必要があります (これにより、DDL 内の何かが変更されたときにページでポストバックが発生し、サーバー側コードの変更を処理します)。

最初の DropDownList の OnSelectedIndexChanged イベント ハンドラー (コード ビハインド) には、次のコードがあります。

// Handle selected item or selected index
if(ddl1.SelectedItem.Text=="Selection1")
{
   // Get items for DDL2
   var items=GetDataForDdl2();

   // Bind the data
   DDL2.DataSource=items;
   DDL2.DataBind();
}

DDL2 の SelectedIndexChanged イベント ハンドラーが DDL3 の項目をバインドするための同様のロジックが必要です。

箱から出してすぐにうまく動作するものについては、ASP.NET AJAX AjaxControlToolkit の CascadingDropDown をチェックしてください: http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/CascadingDropDown/CascadingDropDown.aspx

于 2013-05-30T21:45:09.280 に答える