Свяжите выпадающие данные с помощью веб-метода и ajax каскадное выпадающее меню в asp.net с помощью ajax и webmethod - PullRequest
0 голосов
/ 29 июня 2018

У меня есть раскрывающийся список Bind с использованием каскадного раскрывающегося списка ajax и веб-метода, который работает отлично, и я могу сохранить идентификатор страны и штата в базе данных. Теперь я хочу связать сохраненный идентификатор с раскрывающимся списком в методе заполнения, как мне этого добиться.

Код Aspx ниже :::

<li>
     <asp:DropDownList ID="ddlCountry" runat="server" TabIndex="11"></asp:DropDownList>
     <ajax:CascadingDropDown ID="csdCountry" runat="server" Category="Country" TargetControlID="ddlCountry" PromptText="-- Select Country --" LoadingText=" [Loading Countries...]" ServiceMethod="FetchCountries" ServicePath="~/AjaxCascadingDropDown.asmx"></ajax:CascadingDropDown>
  </li>
  <li>
     <asp:DropDownList ID="ddlState" runat="server" TabIndex="12"></asp:DropDownList>
     <ajax:CascadingDropDown ID="csdState" runat="server"  ParentControlID="ddlCountry" Category="State" TargetControlID="ddlState" PromptText="-- Select State --" LoadingText="[Loading States...]"  ServiceMethod="FetchStates" ServicePath="~/AjaxCascadingDropDown.asmx"></ajax:CascadingDropDown>  
</li>

Код веб-метода ниже :::

   [WebMethod]                
        public CascadingDropDownNameValue[] FetchCountries(string knownCategoryValues, string category)
        {
            GetLookupResponse countryLookupResponse = commonService.GetLookup("Country");


            List<CascadingDropDownNameValue> countries = new List<CascadingDropDownNameValue>();
            foreach (var countryData in countryLookupResponse.LookupItems)
            {
                string CountryID = countryData.ID.ToString();
                string CountryName = countryData.Description.ToString();
                countries.Add(new CascadingDropDownNameValue(CountryName, CountryID));
            }
            return countries.ToArray();            
        }

    [WebMethod]
        public CascadingDropDownNameValue[] FetchStates(string knownCategoryValues, string category)
        {
            int countryId;
            StringDictionary strCountries = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
            countryId = Convert.ToInt32(strCountries["Country"]);
            GetLookupResponse stateLookupResponse = commonService.GetLookup("State");

            List<CascadingDropDownNameValue> states = new List<CascadingDropDownNameValue>();
            foreach (var StateData in stateLookupResponse.LookupItems.Where(id => id.dependencyID == countryId))
            {
                string StateID = StateData.ID.ToString();
                string StateName = StateData.Description.ToString();
                states.Add(new CascadingDropDownNameValue(StateName, StateID));
            }
            return states.ToArray();
        }

Заполните код выпадающего списка :::

ddlCountry.SelectedValue = address.Country.ID.ToString();
ddlState.SelectedValue = address.State.ID.ToString();
ddlCity.SelectedValue = address.City.ID.ToString();

1 Ответ

0 голосов
/ 29 июня 2018

использовать 3 DropDownLists один для каждого объекта, отображение показано ниже

  1. ddlContinents - Список континентов

  2. ddlCountry- Список стран

  3. ddlCity - Список городов

<span style ="font-family:Arial">Select Continent : </span>

<asp:DropDownList ID="ddlContinents" runat="server" AutoPostBack = "true"

             OnSelectedIndexChanged="ddlContinents_SelectedIndexChanged">

<asp:ListItem Text = "--Select Continent--" Value = ""></asp:ListItem>

</asp:DropDownList>

 

<br /><br />

<span style ="font-family:Arial">Select Country : </span>

<asp:DropDownList ID="ddlCountry" runat="server" AutoPostBack = "true"

Enabled = "false"  OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged">

<asp:ListItem Text = "--Select Country--" Value = ""></asp:ListItem>

</asp:DropDownList>

 

<br /><br />

<span style ="font-family:Arial">Select City : </span>

<asp:DropDownList ID="ddlCity" runat="server" AutoPostBack = "true"

 Enabled = "false" OnSelectedIndexChanged="ddlCity_SelectedIndexChanged">

<asp:ListItem Text = "--Select City--" Value = ""></asp:ListItem>

</asp:DropDownList>

 

<br /><br />

<asp:Label ID="lblResults" runat="server" Text="" Font-Names = "Arial" />

добавлено событие OnSelectedIndexChanged для всех DropDownLists, а также для свойства AutoPostBack установлено значение true.

В событии Page_Load страницы я заполняю список континентов DropDownList

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

    ddlContinents.AppendDataBoundItems = true;

    String strConnString = ConfigurationManager

        .ConnectionStrings["conString"].ConnectionString;

    String strQuery = "select ID, ContinentName from Continents";

    SqlConnection con = new SqlConnection(strConnString);

    SqlCommand cmd = new SqlCommand();

    cmd.CommandType = CommandType.Text;

    cmd.CommandText = strQuery;

    cmd.Connection = con;

    try

    {

        con.Open();

        ddlContinents.DataSource = cmd.ExecuteReader();

        ddlContinents.DataTextField = "ContinentName";

        ddlContinents.DataValueField = "ID";

        ddlContinents.DataBind();

    }

    catch (Exception ex)

    {

        throw ex;

    }

    finally

    {

        con.Close();

        con.Dispose();

    }

}

}

Далее в событии SelectedIndexChanged родительского континента DropDownList Я заполняю список стран DropDownList на основе идентификатора континента, выбранного пользователем

protected void ddlContinents_SelectedIndexChanged(object sender, EventArgs e)

{

ddlCountry.Items.Clear();

ddlCountry.Items.Add(new ListItem("--Select Country--", ""));

ddlCity.Items.Clear();

ddlCity.Items.Add(new ListItem("--Select City--", ""));   



ddlCountry.AppendDataBoundItems = true;

String strConnString = ConfigurationManager

    .ConnectionStrings["conString"].ConnectionString;

String strQuery = "select ID, CountryName from Countries " +

                   "where ContinentID=@ContinentID";

SqlConnection con = new SqlConnection(strConnString);

SqlCommand cmd = new SqlCommand();

cmd.Parameters.AddWithValue("@ContinentID",

    ddlContinents.SelectedItem.Value); 

cmd.CommandType = CommandType.Text;

cmd.CommandText = strQuery;

cmd.Connection = con;

try

{

    con.Open();

    ddlCountry.DataSource = cmd.ExecuteReader();

    ddlCountry.DataTextField = "CountryName";

    ddlCountry.DataValueField = "ID";

    ddlCountry.DataBind();

    if (ddlCountry.Items.Count > 1)

    {

        ddlCountry.Enabled = true;

    }

    else

    {

        ddlCountry.Enabled = false;

        ddlCity.Enabled = false;

    }

}

catch (Exception ex)

{

    throw ex;

}

finally

{

    con.Close();

    con.Dispose();

}

}

Вы заметите, что я передаю идентификатор континента в качестве параметра в запрос с использованием свойства SelectedItemValue DropDownList, таким образом, запрос возвращает записи (Страны) для этого идентификатора континента, которые затем привязываются к стране DropDownList

Заполнение города DropDownList

Теперь по выбору страны, я заполняю города для этой страны в списке DropDownList City.

protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)

{

ddlCity.Items.Clear();

ddlCity.Items.Add(new ListItem("--Select City--", ""));

ddlCity.AppendDataBoundItems = true;

String strConnString = ConfigurationManager

           .ConnectionStrings["conString"].ConnectionString;

String strQuery = "select ID, CityName from Cities " +

                            "where CountryID=@CountryID";

SqlConnection con = new SqlConnection(strConnString);

SqlCommand cmd = new SqlCommand();

cmd.Parameters.AddWithValue("@CountryID",

                      ddlCountry.SelectedItem.Value);

cmd.CommandType = CommandType.Text;

cmd.CommandText = strQuery;

cmd.Connection = con;

try

{

    con.Open();

    ddlCity.DataSource = cmd.ExecuteReader();

    ddlCity.DataTextField = "CityName";

    ddlCity.DataValueField = "ID";

    ddlCity.DataBind();

    if (ddlCity.Items.Count > 1)

    {

        ddlCity.Enabled = true;

    }

    else

    {

        ddlCity.Enabled = false;

    }



}

catch (Exception ex)

{

    throw ex;

}

finally

{

    con.Close();

    con.Dispose();

}
* *} Тысяча сорок-девять

Выше я запускаю запрос в Таблице городов и получаю все города, принадлежащие той стране, которая была выбрана пользователем.

Отображение результатов

Наконец, в событии SelectedIndexChanged для City DropDownList я отображаю полные выборы, сделанные пользователем.

protected void ddlCity_SelectedIndexChanged(object sender, EventArgs e)

{

lblResults.Text = "You Selected " +

                  ddlContinents.SelectedItem.Text + " -----> " +

                  ddlCountry.SelectedItem.Text + " -----> " +

                  ddlCity.SelectedItem.Text;

}

...