下拉菜单相互依赖

时间:2013-05-30 20:51:54

标签: c# sql gridview drop-down-menu visual-studio-2012

我有三个下拉菜单正在使用商店过程来填充我的gridview。我需要第一个工具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);
    }
}

1 个答案:

答案 0 :(得分: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