none
duda con autocomplete en C# RRS feed

  • Pregunta

  • Buenas, estoy trabajando en C# y me conecto a una base de datos en ACCESS 2010, tengo problemas con un textbox, quiero que se autocomplete con los datos de un campo en una tabla que esta en mi base de datos, el campo se llama Contactos pero no me realiza el autocompletar y ya lo he revisado(nombre de la tabla, nombre del campo, nombre del textbox, conexion a la base de datos) y no puedo solucionarlo, le dejo el codigo talvez ustedes puedan ayudarme...si no es molestia y lo digo con mucho respeto, les pediria por favor que si pueden ayudarme me indiquen en que estoy fallando sobre el codigo que expongo

    OleDbConnection cnn;

            OleDbDataAdapter da;

            DataTable dt;

            string conexion = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\bin\Debug\Telefonos.accdb";

          

            public FUNDES()

            {

                InitializeComponent();

            }

            private void FUNDES_Load(object sender, EventArgs e)

            {

              try

                {

                    using (cnn = new OleDbConnection(conexion))

                    {

                        cnn.Open();

                        using (da = new OleDbDataAdapter("select Contacto from Contactos", cnn))

                        {

                            dt = new DataTable();

                            da.Fill(dt);

                            this.TBuscar.AutoCompleteSource = AutoCompleteSource.CustomSource;

                            this.TBuscar.AutoCompleteMode = AutoCompleteMode.SuggestAppend;

                            foreach (DataRow dr in dt.Rows)

                            {

                                this.TBuscar.AutoCompleteCustomSource.Add(dr[0].ToString());

                            }

                        }

                    }

                }

                catch { throw new NullReferenceException(); }

                finally {cnn.Close();}

            }

        }

    Gracias


    pabletoreto

    martes, 8 de enero de 2013 3:28

Todas las respuestas

  • ¿Le arroja alguna excepción?

    Veo que en el ejemplo de esta página asignan una colección completa a AutoCompleteCustomSource mientras que usted más bien llena la que el control textbox ya tiene.  Sin embargo estoy sospechando que en realidad no hay colección.  Debería intentar asignando una colección completa tal y como se ve en el ejemplo de ese enlace.

    También le hago notar que el código de su catch no es nada bueno.  No le veo el sentido de cambiar cualquier excepción por NullReferenceException.  ¿Por qué hace esto?


    Jose R. MCP
    Code Samples

    martes, 8 de enero de 2013 3:53
    Moderador
  • simplemente quita el foreach de tu codigo y listo!!
     y asignas tu source al dtable que tienes
    • Editado santival martes, 22 de enero de 2013 20:27
    martes, 22 de enero de 2013 20:25
  • Pues la verdad yo por que no realizas ese auto complete en el evento TextChanged de tu TextBox, como asi de esta manera para ver si te funciona:

    private void TBuscar_TextChanged(object sender, EventArgs e)
            {
                if (this.TBuscar.Text.Trim() != "")
                {
    
    		using (cnn = new OleDbConnection(conexion))
                    {
                        cnn.Open();
                        using (da = new OleDbDataAdapter("SELECT Contacto FROM Contactos WHERE Contacto LIKE '%" + this.TBuscar.Text + "%'", cnn))
                        {
                            dt = new DataTable();
                            da.Fill(dt);
    
                            this.TBuscar.AutoCompleteSource = AutoCompleteSource.CustomSource;
                            this.TBuscar.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    			
    			this.namesCollection.Clear();
                            for (int i = 0; i < dt.Rows.Count; i++)
                    	{
                        		this.namesCollection.Add(dt.Rows[i]["Contacto"].ToString());
                    	}
    
    			this.TBuscar.AutoCompleteCustomSource = namesCollection;
                        }
                    }                
                }
            }

    lunes, 28 de enero de 2013 13:24