2013-05-30 5 views
0

У меня есть три раскрывающихся меню, которые используют магазин Процедура, чтобы заполнить мое 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); 
    } 
} 
+0

Вы можете добавить тег, указывающий, какой язык это ... – eidsonator

ответ

1

А очень просто, хотя и не совсем элегантно, путь будет обрабатывать OnSelectedIndexChanged событие в DropDownList в. Для этого вам нужно убедиться, что каждый DDL, выбор которого повлияет на содержимое другого DDL, имеет свойство AutoPostBack, установленное в true (это гарантирует, что когда что-то в DDL изменится, страница вызовет обратную передачу, что позволит вам для обработки изменений в серверном коде).

В OnSelectedIndexChanged обработчик событий вашего первого DropDownList (в коде-позади), вы будете иметь следующий код:

// 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(); 
} 

Вы бы иметь подобную логику для обработчика событий SelectedIndexChanged DDL2, чтобы затем связать элементы DDL3 и т. д.

За то, что работает хорошо из коробки, проверить CascadingDropDown в ASP.NET AJAX AjaxControlToolkit в: http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/CascadingDropDown/CascadingDropDown.aspx

+0

Спасибо, Im немного запутался о части «GetDataForDdl2». На что это следует ссылаться. Я просто перечисляю, какие выборы должны входить в ddl2 после определения dd1? – user2425793

+0

Это метод заполнителя, так как я не знаю, как вы извлекаете элементы для своего DropDownList. Идея заключается в том, что внутри этого метода вы получаете данные из базы данных, создаете ее самостоятельно или извлекаете из чего-то другого. Затем данные будут отформатированы в списке или даже в DataTable (хотя DataTable является старым, а не предпочтительным способом его выполнения), так что DDL может легко и изначально привязываться к нему. –

Смежные вопросы