AutoCompleteExtender con un archivo XML

Buenas a todos.

Todos conocen el AutoCompleteExtender de la librería ASP.NET AJAX Control Toolkit y te lo mucho que es de utilidad, es mas hace tiempo hice un post sobre llamado AutoCompleteExtender con múltiples columnas en BD y bueno hoy les traigo este tip que como a mi, me sirvió.

Supongamos que queremos implementar la funcionalidad del AutoCompleteExtender y la fuente de datos es un archivo de XML, de primeras uno dice fácil. Pero como todo, nada es fácil, ya que un XML tiene sus dificultades con los formatos.

Para mi caso usare este.

<row CAMPO1="Value" CAMPO2="value"/>

dicho de otra forma.

<row CIE_Codigo="A011" CIE_Descripcion="FIEBRE PARATIFOIDEA A" />
 <row CIE_Codigo="A012" CIE_Descripcion="FIEBRE PARATIFOIDEA B" />
 <row CIE_Codigo="A013" CIE_Descripcion="FIEBRE PARATIFOIDEA C" />

  • Servicio Web
[WebMethod]
    public string[] GetCieXml(string prefixText, int count)
    {
        List<string> suggestions = new List<string>();
        using (XmlTextReader reader = new XmlTextReader(HttpContext.Current.Server.MapPath("~/Tb_CIE10.xml")))
        {
            reader.MoveToContent();
            reader.ReadStartElement();
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element && reader.Name == "row")
                {
                    for (int i = 0; i < reader.AttributeCount; i++)
                    {
                        reader.MoveToAttribute(i);
                        {
                                if (reader.Name =="CIE_Codigo")
                                {
                                    string itemName = reader.ReadInnerXml();
                                    if (itemName.StartsWith(prefixText, StringComparison.InvariantCultureIgnoreCase))
                                    {
                                        suggestions.Add(itemName);
                                        if (suggestions.Count == count) break;
                                    }
                                }
                            }
                        }
                }

                }
                return suggestions.ToArray();

            }
        }

Nota: Para aquellos que están empezando con el cuento de Ajax y los servicios web, recuerdes que para que les funcione necesita quedar así en la definición del servicio.

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService()]

  • En la pagina.

Creo que todos ya saben esta parte, pero coloquémosla por si acaso.

Select Code :-<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender2" runat="server" TargetControlID="TextBox1"  
ServiceMethod="GetCieXml" MinimumPrefixLength="1" EnableCaching="true"  
DelimiterCharacters="" CompletionSetCount="10"  
ServicePath="~/Cie.asmx">  
</ajaxToolkit:AutoCompleteExtender> 

  • El resultado

autocomplete

Bueno esto es todo.

Saludos

Romny