AutoCompleteExtender AJAX Вопрос - PullRequest
       3

AutoCompleteExtender AJAX Вопрос

0 голосов
/ 18 марта 2011

Хорошо. Я использую приведенный ниже код в файле с именем autocomplete.asmx (файл веб-службы). Мой главный вопрос заключается в том, нужно ли создавать разные веб-службы для каждого поля, для которого нужно, чтобы мой автозаполнение работало?То есть, может быть, я хотел бы вытащить название компании вместо страны, но в другой раз, может быть, имя, теперь я знаю, что это просто связано с изменением оператора выбора, но как я могу сделать это так, чтобы в зависимости от того, какое это поле, онознает, какое выражение select использовать?

Спасибо

public class AutoComplete : System.Web.Services.WebService

{

[WebMethod]

public string[] GetCountriesList(string prefixText)

{

    DataSet dtst = new DataSet();

    SqlConnection sqlCon = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);

    string strSql = "SELECT CountryName FROM Tbl_ooo WHERE CountryName LIKE '" + prefixText + "%' ";

    SqlCommand sqlComd = new SqlCommand(strSql, sqlCon);

    sqlCon.Open();

    SqlDataAdapter sqlAdpt = new SqlDataAdapter();

    sqlAdpt.SelectCommand = sqlComd;

    sqlAdpt.Fill(dtst);

    string[] cntName = new string[dtst.Tables[0].Rows.Count];

    int i = 0;

    try

    {

        foreach (DataRow rdr in dtst.Tables[0].Rows)

        {

            cntName.SetValue(rdr["CountryName"].ToString(), i);

            i++;

        }

    }

    catch { }

    finally

    {

        sqlCon.Close();

    }

    return cntName;

}

}

1 Ответ

0 голосов
/ 18 марта 2011

Да, вы можете использовать тот же веб-метод веб-службы для заполнения страны и компании.

Для этого вы хотите использовать свойство ContextKey в элементе управления aCax AutoCompleteExtender

Ниже приведен пример кода

Разметка:

Поиск

<asp:TextBox ID="txtSearch" CssClass="textBlackBold" runat="server"       Width="350px"></asp:TextBox>                                
<asp:DropDownList ID="ddlType" runat="server"                                AutoPostBack="True" onselectedindexchanged="ddlType_SelectedIndexChanged">                
                                <asp:ListItem Value="0">Country</asp:ListItem>
                                <asp:ListItem Value="1">Companies</asp:ListItem>   
</asp:DropDownList>
<asp:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server"
                CompletionListCssClass="autocomplete_completionListElement" 
                CompletionListItemCssClass="autocomplete_listItem" 
                CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem" 
                EnableCaching="true" ContextKey="Products" UseContextKey="true"
                TargetControlID="txtSearch" MinimumPrefixLength="1" 
                ServiceMethod="GetInfo" ServicePath="~/WebService.asmx" >
            </asp:AutoCompleteExtender>

Код, стоящий за кодом C #:

Защищенный void ddlType_SelectedIndexChanged (отправитель объекта, EventArgs e) {string strContextKey = "" *

    if(ddlType.SelectedValue.ToString() == "0")
        strContextKey = "Country";
    else
        strContextKey = "Companies";

    AutoCompleteExtender1.ContextKey = ddlType.SelectedItem.Text;
}

Код WebService:

[WebMethod]
public string[] GetInfo(string prefixText, string contextKey)
{
    DataSet dtst = new DataSet();                        
    SqlConnection sqlCon = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
    string strSql = "";

    if (contextKey == "Country")
    {                        
        strSql = "SELECT CountryName FROM Tbl_ooo WHERE CountryName LIKE '" + prefixText + "%' ";              
    }
    else if(contextKey == "Companies")
    {
        strSql = //Other SQL Query
    }

    SqlCommand sqlComd = new SqlCommand(strSql, sqlCon);                        
    sqlCon.Open();                        
    SqlDataAdapter sqlAdpt = new SqlDataAdapter();
    sqlAdpt.SelectCommand = sqlComd;                        
    sqlAdpt.Fill(dtst);                        
    string[] cntName = new string[dtst.Tables[0].Rows.Count];                        
    int i = 0;                        
    try                        
    {                            
       foreach (DataRow rdr in dtst.Tables[0].Rows)                            
       {                                
          cntName.SetValue(rdr[0].ToString(),i);
          i++;                            
       }                        
    }
    catch { }                        
    finally                        
    {
        sqlCon.Close();                        
    }                        
    return cntName; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...