31 de enero de 2012

Autocomplete textbox C#

Creamos un nuevo proyecto en C# 


luego agregamos un textbox al formulario


y modificamos las propiedades siguientes del textbox partiendo de esto:


y las dejamos así:


igualmente esto podemos especificarlo en el código, por lo que no es estrictamente necesario cambiar las propiedades del textbox pero igual es bueno saberlo(digo yo), en este caso, la propiedad AutoCompleteMode establece el “efecto visual” que tendrá nuestro autocomplete, sus valores pueden ser: 

Append: Autocompleta en la misma linea mediante se va escribiendo 
None: sin autocompletar
Suggest: ofrece las opciones en una lista desplegable abajo del textbox.
SuggestAppend: une la lista con el autocompletado en el textbox

luego en el AutoCompleteSource se especifica el CustomSource ya que seremos nosotros quienes especificaremos el origen de datos que utilizara el textbox.


Opción 1: Utilizando SqlDataReader

Aqui se especifican las propiedades del textbox desde la ventana de propiedades, tal como se describió anteriormente, por lo que para funcionar deben quedar estas propiedades como esta la imagen.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Autocommplete_C
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        SqlConnection cnn;
        SqlCommand cmd;
        SqlDataReader reader;
        private void Form1_Load(object sender, EventArgs e)
        {

            using (cnn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=imagenes"))
            {
                using (cmd = new SqlCommand("select nombre from img", cnn))
                {
                    cnn.Open();
                    reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        this.textBox1.AutoCompleteCustomSource.Add(reader[0].ToString());
                    }
                    reader.Close();
                    cnn.Close();
                }
            }
        }
    }
}


Opción 2: Utilizando SqlDataReader

Aquí se especifican las propiedades desde el código, se puede utilizar cualquier opción no hay mas diferencia entre estas., aunque siempre lo mejor es tenerlo todo especificado en el código.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Autocommplete_C
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        private SqlConnection cnn;
        private SqlDataAdapter da;
        private DataTable dt;
        private string sql = "select nombre from img";

        private void Form2_Load(object sender, EventArgs e)
        {
            using (cnn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=imagenes"))
            {
                using (da = new SqlDataAdapter(sql, cnn))
                {
                    dt=new DataTable();
                    da.Fill(dt);

                    this.textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
                    this.textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                    foreach (DataRow dr in dt.Rows)
                    {
                        this.textBox1.AutoCompleteCustomSource.Add(dr[0].ToString());
                    }

                }
            }
        }
    }
}
   


Compilamos, ejecutamos y ya esta.