VELOCIDAD DE ESCAPE
Inicio > Historias > AUTOCOMPLETADO AJAX EN DOS PATADAS
2008-06-18
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server"
TargetControlID="TextBox1"
ServicePath="ListaDeClientes.asmx"
CompletionInterval="10"
CompletionSetCount="10"
ServiceMethod="ObtenerClientes"
MinimumPrefixLength="1" />
</div>
</form>
Añadimos un servicio web al proyecto que va a alojare la lógica que nos devuelve los datos. En este caso el origen puede ser muy variado, tanto como se nos ocurra, pero yo me decanto por lo que en principio es más lógico: la devolución de una serie de datos de una base de datos SQL Server en función del los valores introducidos en el textbox.
Importante a tener en cuenta es que el ServidePath del AutoCompleteExtender en la página Default.aspx tenga el valor del servicio web que hemos creado y ServiceMethod apunte al WebMethod dentro del mismo que nos va a devolver los datos.
También es importante que el Servicio Web referencie el ScriptService tal y como sigue para poder funcionar. De otro modo no lo hará.
Solamente queda añadir el WebMethod correspondiente dentro de nuestro Servicio Web para obtener los datos. Un ejemplo muy sencillo y básico:
[WebMethod]
public string[] ObtenerClientes(string prefixText)
{
int count = 10;
string sql = "Select * from clientes Where apellidos like @prefixText";
SqlDataAdapter da = new SqlDataAdapter(sql, "Data Source=miservidor;Initial Catalog=mibasededatos;User Id=miusuario;Password=miclave;");
da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 50).Value = prefixText + "%";
DataTable dt = new DataTable();
da.Fill(dt);
string[] items = new string[dt.Rows.Count];
int i = 0;
foreach (DataRow dr in dt.Rows)
{
items.SetValue(dr["NOMBRE"].ToString() + ' ' + dr["apellidos"].ToString(), i);
i++;
}
return items.ToArray();
}
Lo bueno, si breve, dos veces bueno.
Gracias a Code Colorizer de: CarlosAg
AUTOCOMPLETADO AJAX EN DOS PATADAS
Como es evidente, con Visual Studio 2008. Tras seguir los pasos de esta entrada anterior donde se indica cómo tener funcionando el Ajax Control Toolkit, tras añadir el textbox hemos de añadir un ScriptManager. El código de nuestro formulario queda más o menos así:<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server"
TargetControlID="TextBox1"
ServicePath="ListaDeClientes.asmx"
CompletionInterval="10"
CompletionSetCount="10"
ServiceMethod="ObtenerClientes"
MinimumPrefixLength="1" />
</div>
</form>
Añadimos un servicio web al proyecto que va a alojare la lógica que nos devuelve los datos. En este caso el origen puede ser muy variado, tanto como se nos ocurra, pero yo me decanto por lo que en principio es más lógico: la devolución de una serie de datos de una base de datos SQL Server en función del los valores introducidos en el textbox.
Importante a tener en cuenta es que el ServidePath del AutoCompleteExtender en la página Default.aspx tenga el valor del servicio web que hemos creado y ServiceMethod apunte al WebMethod dentro del mismo que nos va a devolver los datos.
También es importante que el Servicio Web referencie el ScriptService tal y como sigue para poder funcionar. De otro modo no lo hará.
[System.Web.Script.Services.ScriptService]
Solamente queda añadir el WebMethod correspondiente dentro de nuestro Servicio Web para obtener los datos. Un ejemplo muy sencillo y básico:
[WebMethod]
public string[] ObtenerClientes(string prefixText)
{
int count = 10;
string sql = "Select * from clientes Where apellidos like @prefixText";
SqlDataAdapter da = new SqlDataAdapter(sql, "Data Source=miservidor;Initial Catalog=mibasededatos;User Id=miusuario;Password=miclave;");
da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 50).Value = prefixText + "%";
DataTable dt = new DataTable();
da.Fill(dt);
string[] items = new string[dt.Rows.Count];
int i = 0;
foreach (DataRow dr in dt.Rows)
{
items.SetValue(dr["NOMBRE"].ToString() + ' ' + dr["apellidos"].ToString(), i);
i++;
}
return items.ToArray();
}
Lo bueno, si breve, dos veces bueno.
Gracias a Code Colorizer de: CarlosAg
Programación | jomaweb | 3 Comentarios | Enlace
Referencias (TrackBacks)
URL de trackback de esta historia http://jomaweb.blogalia.com//trackbacks/58071
Comentarios
1 |
|
||
"Como es evidente, con Visual Studio 2008". O con Ruby on Rails. O con cualquier otro framework que traiga ese tipo de generadores de javascript. |
3 |
|
||
best web hosting
|