You are on page 1of 8

Hoy estaba mostrandoles a unos compaeros de trabajo trozos de cdigo bsicos para comenzar a programar en C#.

Net y lo primero que hicimos fue Conectarnos a un motor de Base de Datos MySQL y cargamos una grilla a partir de un DataReader y not que result ms complicado que cargarlo desde un DataTable, entonces decid escribir el cdigo aqu para otros que lo necesiten en algn momento. Basicamente, lo que haremos ser seleccionar datos de una tabla y lo cargaremos en un DataReader, luego recorreremos secuencialmente la misma e iremos cargando fila por fila la grilla. Deben tener en cuenta que la grilla ya tiene que tener diseada las columnas o en su defecto ir agregandoles por cdigo las mismas. Deben tener muy en cuenta que si bien se puede poblar una grilla u otros controles a partir de un DataSet/DataTable o DataReader cada uno presenta ventajas en distintas situaciones. Un DataTable puede recorrerse hacia delante como hacia atrs en cualquier momento, se pueden modificar sus datos, serializarse, agregar filas al mismo e incluso contener varios DataTables con distintas fuentes de alimentacin e ir agrupndolos en un DataSet, pero son ms lentas ya que deben cargarse completamente para poder utilizarlas adems que tienen un espacio mayor en la memoria por su estructura compleja. En cambio el DataReader pierde flexibilidad de trabajo ya que es de slo lectura de lectura secuencial hacia delante, pero gana mucho en velocidad de trabajo, especialmente si hablamos de consultas que devuelven miles de registros de una vez. Hora de ver cdigo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 //String para cadena de conexion StringBuilder sCadena = new StringBuilder(""); // crear la cadena de conexion sCadena.Append("Server=SERVIDOR;"); sCadena.Append("Port=PUERTO;"); sCadena.Append("DataBase=BD;"); sCadena.Append("Uid=USUARIO;"); sCadena.Append("Pwd=PASSWORD;"); sCadena.Replace("SERVIDOR", "127.0.0.1"); sCadena.Replace("PUERTO", "3306"); sCadena.Replace("BD", "devtroce"); sCadena.Replace("USUARIO", "usuario"); sCadena.Replace("PASSWORD", "**************"); using (MySql.Data.MySqlClient.MySqlConnection connMY = new MySql.Data.MySqlClient.MySqlConnection()) { // asignar cadena de conexion connMY.ConnectionString = Convert.ToString(sCadena); using (MySqlCommand cmdConsulta = new MySqlCommand()) { try { // setear parametros del command cmdConsulta.CommandType = CommandType.Text; cmdConsulta.Connection = connMY;

28 cmdConsulta.CommandText = "Select * from tabla"; 29 30 connMY.Open(); 31 32 MySqlDataReader dr = 33 cmdConsulta.ExecuteReader(); while (dr.Read()){ 34 35 grilla.Rows.Add(dr.GetInt32(0), 36 dr.GetString(1), dr.GetString(2), dr.GetDateTime(3), dr.GetString(4), 37 dr.GetDateTime(5), dr.GetString(6)); 38 } // end while 39 } // end try catch (Exception ex) 40 41 { 42 MessageBox.Show(ex.Message); 43 } // end catch finally 44 45 { connMY.Close(); } // end finally } // end using command } // end using conexion

Realizar bsqueda en un DataGridView (Filtrar Informacin)


febrero 11, 2011 ka0stj Deja un comentario Go to comments Hola, hoy quiero compartir como realizar una bsqueda sencilla dentro del contenido de un DataGridView ya que en ocasiones nos es de bastante utilidad en las pantallas de consulta de nuestras aplicaciones. En el ejemplo se tratar de la tabla PERSONA que ya debe existir en nuestra Base de Datos. Lo primero que haremos es crear nuestra pequea interfaz que contendr 1 textbox donde escribiremos parte del nombre de la persona que queremos buscar, un botn el cual se encargar de ejecutar el cdigo necesario para realizar la bsqueda y un DataGridView que mostrar la informacin que filtraremos. Quedar algo similar a lo siguiente:

Bien, dejamos a un lado la vista de diseo y nos vamos a la interesante que es la de cdigo. Lo primero que haremos es agregar el siguiente using ya que lo necesitamos para el acceso a datos.

using System.Data.SqlClient;

Aunque esta seccin no trata de como llenar un DataGridView es necesario el siguiente mtodo para cargarle la informacin y asi poder realizar la bsqueda (filtrado):
public void CargarDataGridView(System.Windows.Forms.DataGridView ElDataGridView, _ String Sql, SqlConnection objConn) { SqlCommand ElComando = new SqlCommand(); SqlDataReader ElReader; System.Data.DataTable ElDataTable = new System.Data.DataTable(); try {

ElComando = new SqlCommand(Sql, objConn); ElReader = ElComando.ExecuteReader(); ElDataTable.Load(ElReader); ElDataGridView.DataSource = ElDataTable; } catch (Exception e) { throw (e); } }

En el evento Load del formulario pegamos el siguiente cdigo que se encargar de cargarle la informacin al DataGridView en cuanto se cargue el form.
string ComandoSQL = SELECT * FROM PERSONA ORDER BY ID_PERSONA; using (SqlConnection connection = new SqlConnection(Cadena de Conexin)) { try { connection.Open(); CargarDataGridView(this.dgvPersonas, ComandoSQL, connection); connection.Close(); } catch (Exception ex) { throw (ex); } }

Hasta aqui ya tenemos nuestra interfaz y la informacin cargada en nuestro DataGridView, ahora necesitamos darle funcionalidad a nuestro botn que realizar el filtrado para ello damos doble click sobre el y pegamos el siguiente cdigo.
using (SqlConnection connection = new SqlConnection(Cadena de Conexin)) try { string ConsultaSQL = SELECT * FROM PERSONA ORDER BY ID_PERSONA; connection.Open(); BindingSource source1 = new BindingSource(); SqlDataAdapter CustomerTableAdapter = new SqlDataAdapter(ConsultaSQL, connection); DataTable MiDataTable = new DataTable(); CustomerTableAdapter.Fill(MiDataTable); source1.DataSource = MiDataTable; this.dgvPersonas.DataSource = source1;

source1.Filter = nombre LIKE % + this.tbNombre.Text + %; connection.Close(); } catch (Exception ex) { throw (ex); } }

Como podemos observar es algo sencillo de realizar, ahora solo resta ejecutar nuestra aplicacin para verificar que funcione de la manera que esperamos.

Saludos!

Introduction
One of the most questions asked to me, how to fill dataGridview Using DataReader, if you note the behavior of DataReader you will note that when you read using DataReader you read row by row so you you make looping to read all records if you want to display all record or any element from record , in other hand dataGridview need to take all data of your records in one package, so the solution is to make centralize store by make class that contains properties and set value for each properties when you read the value of each record and store each object from class that you create in ArrayList so the ArrayList will represent your store.

Using the Code


Step1: Create class that contains properties Collapse | Copy Code
public class MyDetails { private int age; public int Age { get { return age; } set { age = value; } } private string name; public string Name { get { return name; } set { name = value; } } private int id; public int Id { get { return id; } set { id = value; } } }

Step 2: create ArrayList to represent your store Collapse | Copy Code


ArrayList sequence = new ArrayList();

Step 3: When you retrieve do the following Collapse | Copy Code

while (reader.Read()) { MyDetails m = new MyDetails(); m.Id = (int)reader[0]; m.Name = reader[1].ToString(); m.Age = (int)reader[2]; sequence.Add(m); } dataGridView1.DataSource = sequence;

The Final Code


Collapse | Copy Code
SqlConnection sqlCon = null; try { sqlCon = new SqlConnection(); sqlCon.ConnectionString = "Your Connection String"; SqlCommand cmd = new SqlCommand(); cmd.Connection = sqlCon; cmd.CommandText = "SELECT * FROM StudentInfo"; sqlCon.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { MyDetails m = new MyDetails(); m.Id = (int)reader[0]; m.Name = reader[1].ToString(); m.Age = (int)reader[2]; sequence.Add(m); } dataGridView1.DataSource = sequence; } finally { sqlCon.Close(); }

You might also like