locked
Lectura de datos RRS feed

Respuestas

  • hola,

    o sea cargar una datagrid desde un datatable o dataset es simple, lo que no llego a entender es a que te refieres con tiempo real.

    Rellenar un dataset con una consulta SQL y volcarlo a un DataGridView (VB.NET)

    este linqu te dara una idea de como llenar el dataset, por emdio del objeto MySqlDataAdapter.

    alli mismo veras algunas tecnicas bastante ientesantes, como es el uso del cm.Parameters, este esta bueno asi puedes armar tus consultas sin contatenar los filtros como string.

    analiza este link puedes sacarle mucho jugo. se quee sta en vb.net pero bueno si programs en c#, leer vb.net no deberia ser dificil.

    una aclracion cuando bindees el dataset a la grilla ten en cuanta de la priemra vez de dejar habilitada la iopcion para que te genere las columans automaticamente. Luego cuando todo funcione podras deshabilitar esta opcion  y definir las columnas, especificando uan por una.


    Nota, si me das algun rato veo de descargar la solucion y armante algo de esto, pero en este momento estoy en medio de unos cambios en el proyecto en dodne trabajo, lo cual me resta tiempo para otros temas.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 19 de julio de 2009 14:17
  • hola,

    en las lineas:

        MySqlConnection cn = default(MySqlConnection);
        MySqlCommand cm = default(MySqlCommand);
        MySqlDataAdapter da = default(MySqlDataAdapter);
        DataSet ds = default(DataSet);

    puedes quitarle el default

    por el resto esta bastante bien la traduccion, puedes usarla de base para tu implementacion.

    con respecto a lo del tiempo real, es como que necesitaras un evento desde tu db hacia el codigo para que avise cuando se actualza.

    si fuera en sql server, por ahi podrias logarlo con algun trigger o similar codificado en codigo manejado, igual esto que comento habria que verlo.
    en mysql se que esto lo reemplazas con el timer.

    busque algo similar pero no encontre nada, n solo para mysql, sino para ninguna otro tipo de db.
    lo que no bsuque es si hay algo para base de datos orientadas a objetos, una consulta utilziar este tipo de db te serviria ?
    me refiero a algo como db4o , la unica manaca es que ha que hacer todo de nuevo, porque es otra la forma en que se trabaja con estas db.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 19 de julio de 2009 16:40
  • hola,

    investigando por ahi pude ver que habria una tecnica para observar la base de datos y lanzar eventos en tu codigo.
    pero hay malas noticias esto solo pude verlo para SQL Server.

    Implementing SQL Server 2005 Query Notifications in C# Windows Application

    como observaras la clases tiene el nombre de SqlDependency.

    estuve viendo si existia su equivalente en mysql, y vi que existe, parece ser que hay una implementacion, pero es de un provider que es pago.

    MySqlDependency Class

    sis e peude encontrar alguna distribucion del driver libre de mysql seria genial ya que podrias utilziar la misma tecnica.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Metaconta miércoles, 29 de julio de 2009 8:07
    lunes, 20 de julio de 2009 16:14
  • hola,

    prueba con algo como esto

    private void timer_log_Tick(object sender, EventArgs e)
    {
        string sql = "SELECT * FROM 'log' WHERE cursoAcademico=@ID";
       
        MySqlConnection cn = new MySqlConnection("Data Source=localhost; Database=pic_remoto; User ID=Acaymo; Password=Metaconta2009; Allow Zero Datetime=True; CHARSET=latin1");
        cn.open();

        MySqlCommand cm = new MySqlCommand();
        cm.CommandText = sql;
        cm.CommandType = CommandType.Text;
        cm.Connection = cn;
        cm.Parameters.Add("ID", MySqlDbType.Int32);
        // cm.Parameters("ID").Value = 2006;
       
        MySqlDataAdapter da = new MySqlDataAdapter(cm);

        DataSet ds = new DataSet();
        da.Fill(ds);
        dgv.datasource = ds.Tables(0).DefaultView;

    }

    pero algunas aclaraciones.

    -el parametro si bien lo estas declarando pude ver que has comentado la linea en donde le pasas el valor, prueba descomentandola, y asignandole un valor que sepas dara datos de resultado.


    si el fidne me hago un rato vere de tomar tu ultimo link en dodne compartes el codigo y armar algo un poco ams probado, asi tienes una base mas solida para continuar

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Metaconta miércoles, 29 de julio de 2009 8:07
    viernes, 24 de julio de 2009 12:47
  • hola,

    me pude hacer un ratito, y modificar el codigo para dejar andando la grilla, como veras solo faltaban algunos detalles para dejarla andando.

    link

    te paso algunos comentarios:

    - me base en una version que espero sea la ultima, los link note que caducaron, por eso me parece que no es la ultima version que publicaste, pero igual para el ejemplo sirve. Te recomiendo que hagas uso de skydrive te da 25Gb de almacenamiento para poder subir tu material y este no caduca, simplemente si tienes una cuanta de hotmail puedes usarlo, es donde subo normalmente el material a compartir

    - bien con respecto a la grilla le faltaban algunos detalles, el primero es la propiedad AutoGenerateColumns, como veras la puse en el codigo en false. Si la dejas en true querra generar las columnas de forma dinamica no tomandote las que tu definas, como en este caso.

    - si visualizas el cuadro de edicion de columnas del datagridview, veras una propiedad por columna muy importante que te falto especificar, esta es "DataPropertyName", alli deberas colocar el nombre del atributo con el que quieres bindear la columna desde tu origen de datos. Basicamente es el nombre de tu columna en el DataTable.

    - te recomiendo verifiques la consulta sql, yo no tenia la estructura del la tabla "log" a mano asi que lo hice con otro tabla para probar que todo funcione, me parecio raro que la tabla "log" tenga un campos de nombre "cursoAcademico", por eso te recomiendo verificar quee ste correcto.

    - para no usar un timer yo implemente todo en el evento de un boton, prueba que todo funcione y si es asi puedes pasar la implementacion al timer si lo necesitas.


    bueno espero funcione todo bien, cualquier cosita la revisamos.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 27 de julio de 2009 2:40
  • hola,

    la propiedad esta especificada en esta linea:
    dataGridView1.AutoGenerateColumns = false;

    esta justo arriba de esta ultima "dataGridView1.DataSource = ds.Tables[0];"

    es la anteutlima linea.

    si te comentaba lo del skydrive porque los links que publicaste son muy distintos a los que estoy utilizando, estas seguro quee s skydrive el que usas ?
    revisa con los link que te pase, y verifica cuando descargas del link que te apso que la pagina tenga el mismo estilo.

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 27 de julio de 2009 13:00
  • si la tabla se llama log va sin comillas, es decir las comillas no se usan en el nombre de la tabla:

    sql = "SELECT * FROM alumnos WHERE cursoAcademico=@curso";
    
    cm.Parameters.Add("@curso", MySqlDbType.Int32);
    
    cm.Parameters("@curso").Value = 2006;
    


    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Blog Técnico
    lunes, 27 de julio de 2009 14:15
    Moderador
  • que consulta sql estas utilizando, podra ser esta:

     "SELECT * FROM log WHERE 1 = @ID"

    si es asi rcuerda que deberias replzar el 1 por el nombre de un campo de la tabla log

    algo como ser:

     "SELECT * FROM log WHERE ID = @ID"

    igualmente segun vi por ahi en la grilla querras mostrar todos los registro de esa tabla, para eso usa

    SELECT * FROM log


    Nota: algo que vi y me llamo la atencion es que en las pruenas que realice no utilce las comilas simples en el nombre de la tabla.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Metaconta miércoles, 29 de julio de 2009 8:08
    lunes, 27 de julio de 2009 14:24
  • hola,

    prueba de lanzar el query si las comillas simples, solo para probar a veces las consultas que funcionan bien el mysql desde codigo no andan del todo bien.


    - otro punto elimina las lineas:

                cm.Parameters.Add("ID", MySqlDbType.Int32);
                cm.Parameters["ID"].Value = 1;
    ya que no tienes parametros en el query

    - has verificado que el conection string que apunta a la db sea el correcto, o sea estas apuntando a la db correcta ?

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Metaconta miércoles, 29 de julio de 2009 8:08
    lunes, 27 de julio de 2009 19:23
  • insisto , las comillas NO se usan en el nombre de la tabla, mucho menos comillas sencillas porque si asi fuera el motor no tendria como diferenciar entre el nombre de una tabla y una 'cadena' normal. A veces se usan comillas dobles para el nombre de la tabla pero solo en DB que soporten nombres de tabla con espacios o catacteres no ANSI.

    En definitiva: que select quieres hacer? que tablas? que campos? que filtros?




    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Blog Técnico
    lunes, 27 de julio de 2009 19:55
    Moderador
  • no utilices las dobles comillas salvo lo necesites y si tu tabla se llama log o estudiandes o cursos esta claro que no lo necesitas.


    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Mi Blog C# XNA Sistemas Operativos
    lunes, 27 de julio de 2009 19:59
    Moderador
  • No , realmente nunca debes usar las comillas para el nombre de la tabla. si un día eso te vota error porque tu tabla tiene un nombre con espacios o usas la ñ o tildes ... ese día prueba con doble comilla ("SELECT * FROM \"table_name\" ")




    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Mi Blog C# XNA Sistemas Operativos
    lunes, 27 de julio de 2009 20:04
    Moderador
  • hola,

    en realdiad te aconsejo no utilices ningun caracter para las tablas.

    como bien comenta Juan Carlos estos son utilizados en casos en dodne el nombre de la tabla no respecta los nombres ANSI, como por ejemplo una tabla de nombre "Vendedores Zona"

    este tiene un espacio entonces se utiliza en el consulta del forma [Vendedores Zona], pero esto es para SQL Server.

    SELECT * FROM [Vendedores Zona]


    en tu caso por lo nombre de tablas que utilizas no creo que tengas problemas

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Metaconta miércoles, 29 de julio de 2009 8:08
    lunes, 27 de julio de 2009 20:05
  • hola,

    si revisdas las propiedades de definiciond e asl columnas del datagridview veras que estan las propiedades para permitir el ajuste automatico de las columnas o de especificar el ancho de las mismas.

    tambien veras que hay atributos en la columan para esocificar un formato, podrias utilizarlo en las fechas

    Cómo: Dar formato a datos en el control DataGridView de formularios Windows Forms

    este link te explcia como dar formato por codigo, pero bsuca las mismas propeidades desde las propeidades de la columna que seguro estan alli.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 28 de julio de 2009 12:53
  • hola,

    revise el codigo que subiste y pude notar que tienes la linea:

    //dataGridView1.AutoGenerateColumns = false;

    comentada

    esta es clave para que no te genere de forma automatica las columnas y tu puedas controlarlas y definir estilos y anchos de columan desde diseño

    o sea como veras en el ejemplo que te pase, las columnas las creo desde el diseño no deje que propia grilla las cree desde los datos de tu db.
    si lo haces asi podras controlar cada columna.

    de forma dinamica tambien se puede, pero bueno ahi la cosa ya es algo ams compleja porque debes hacer todo por codigo.

    Prueba como en el codigo que te envie declarar cada columna, igualmente tu conoces cuales te estan llegando desde la db.
    Nota, no te olvide de definir el atributo "DataPropertyName" en cada columna.

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 28 de julio de 2009 16:30

Todas las respuestas

  • hola,

    o sea cargar una datagrid desde un datatable o dataset es simple, lo que no llego a entender es a que te refieres con tiempo real.

    Rellenar un dataset con una consulta SQL y volcarlo a un DataGridView (VB.NET)

    este linqu te dara una idea de como llenar el dataset, por emdio del objeto MySqlDataAdapter.

    alli mismo veras algunas tecnicas bastante ientesantes, como es el uso del cm.Parameters, este esta bueno asi puedes armar tus consultas sin contatenar los filtros como string.

    analiza este link puedes sacarle mucho jugo. se quee sta en vb.net pero bueno si programs en c#, leer vb.net no deberia ser dificil.

    una aclracion cuando bindees el dataset a la grilla ten en cuanta de la priemra vez de dejar habilitada la iopcion para que te genere las columans automaticamente. Luego cuando todo funcione podras deshabilitar esta opcion  y definir las columnas, especificando uan por una.


    Nota, si me das algun rato veo de descargar la solucion y armante algo de esto, pero en este momento estoy en medio de unos cambios en el proyecto en dodne trabajo, lo cual me resta tiempo para otros temas.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 19 de julio de 2009 14:17
  • Buenas.

    Según en esta Web el código lo  puedes convertir aquí.

    http://www.developerfusion.com/tools/convert/vb-to-csharp/

    {
        string sql = null;
        MySqlConnection cn = default(MySqlConnection);
        MySqlCommand cm = default(MySqlCommand);
        MySqlDataAdapter da = default(MySqlDataAdapter);
        DataSet ds = default(DataSet);
        
        sql = "SELECT * FROM alumnos WHERE cursoAcademico=?curso";
        cn = new MySqlConnection("Data Source=servidor;Database=base_de_datos;User ID=usuario; Password=clave; Allow Zero Datetime=True; CHARSET=latin1");
        cn.open();
        
        cm = new MySqlCommand();
        cm.CommandText = sql;
        cm.CommandType = CommandType.Text;
        cm.Connection = cn;
        cm.Parameters.Add("?curso", MySqlDbType.Int32);
        cm.Parameters("?curso").Value = 2006;
        da = new MySqlDataAdapter(cm);
        
        ds = new DataSet();
        da.Fill(ds);
        dgv.datasource = ds.Tables(0).DefaultView;
    }
    Examinaré la web esa de VB .Net. Lo de tiempo real significa que los datos que se muestran en el datagridview, es lo que está actualmente en MySQL, si se modifica algo, datagridview lo actualiza.

    Es como al enfocar con la cámara de un movil un paisaje, en la pantalla lo vez en tiempo real, no media hora después.

    Chao.
    domingo, 19 de julio de 2009 16:31
  • hola,

    en las lineas:

        MySqlConnection cn = default(MySqlConnection);
        MySqlCommand cm = default(MySqlCommand);
        MySqlDataAdapter da = default(MySqlDataAdapter);
        DataSet ds = default(DataSet);

    puedes quitarle el default

    por el resto esta bastante bien la traduccion, puedes usarla de base para tu implementacion.

    con respecto a lo del tiempo real, es como que necesitaras un evento desde tu db hacia el codigo para que avise cuando se actualza.

    si fuera en sql server, por ahi podrias logarlo con algun trigger o similar codificado en codigo manejado, igual esto que comento habria que verlo.
    en mysql se que esto lo reemplazas con el timer.

    busque algo similar pero no encontre nada, n solo para mysql, sino para ninguna otro tipo de db.
    lo que no bsuque es si hay algo para base de datos orientadas a objetos, una consulta utilziar este tipo de db te serviria ?
    me refiero a algo como db4o , la unica manaca es que ha que hacer todo de nuevo, porque es otra la forma en que se trabaja con estas db.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 19 de julio de 2009 16:40
  • hola,

    investigando por ahi pude ver que habria una tecnica para observar la base de datos y lanzar eventos en tu codigo.
    pero hay malas noticias esto solo pude verlo para SQL Server.

    Implementing SQL Server 2005 Query Notifications in C# Windows Application

    como observaras la clases tiene el nombre de SqlDependency.

    estuve viendo si existia su equivalente en mysql, y vi que existe, parece ser que hay una implementacion, pero es de un provider que es pago.

    MySqlDependency Class

    sis e peude encontrar alguna distribucion del driver libre de mysql seria genial ya que podrias utilziar la misma tecnica.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Metaconta miércoles, 29 de julio de 2009 8:07
    lunes, 20 de julio de 2009 16:14
  • Si se puede leer los datos en el datagridview con un button, con el timer se actualiza por cada segundo también lo hará.

    Ahora me toca hacer funcionar que los datos se muestren en datagridview.
    lunes, 20 de julio de 2009 20:06
  • A ver si me hechas una ayudita que estoy verde. He tardado en responder porque estaba por ahí buscando empleo.

    DESCARGA


    Saludo.
    jueves, 23 de julio de 2009 12:47
  • hola,

    si yo estuve viendo si el driver que estabas utilziando tenia las referencias a MySqlDependency para que puedas implementar sin necesidad del uso de timers, pero no tuve suerte, ese driver es muy generico, se ve que la implementacion solo esta en un driver propietario.

    si me hago un rato le doy una mirada al proyecto.

    puediste implementar el uso del  datagridview ?

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 23 de julio de 2009 12:51
  • No mucho, es el problema que me da. Lo puse bajo el Timer_log para activarlo cada segundo o 1000 ms.

    jueves, 23 de julio de 2009 13:13
  • Puse algo así pero no funciona. Y lo de Default, si lo quito no funciona tampoco.

    private void timer_log_Tick(object sender, EventArgs e)
            {
                string sql = null;
                MySqlConnection cn = default(MySqlConnection);
                MySqlCommand cm = default(MySqlCommand);
                MySqlDataAdapter da = default(MySqlDataAdapter);
                DataSet ds = default(DataSet);
    
                sql = "SELECT * FROM 'log' WHERE cursoAcademico=ID";
                cn = new MySqlConnection("Data Source=localhost; Database=pic_remoto; User ID=Acaymo; Password=Metaconta2009; Allow Zero Datetime=True; CHARSET=latin1");
                cn.open();
    
                cm = new MySqlCommand();
                cm.CommandText = sql;
                cm.CommandType = CommandType.Text;
                cm.Connection = cn;
                cm.Parameters.Add("ID", MySqlDbType.Int32);
               // cm.Parameters("ID").Value = 2006;
                da = new MySqlDataAdapter(cm);
    
                ds = new DataSet();
                da.Fill(ds);
                dgv.datasource = ds.Tables(0).DefaultView;
    
            }


    viernes, 24 de julio de 2009 6:37
  • hola,

    prueba con algo como esto

    private void timer_log_Tick(object sender, EventArgs e)
    {
        string sql = "SELECT * FROM 'log' WHERE cursoAcademico=@ID";
       
        MySqlConnection cn = new MySqlConnection("Data Source=localhost; Database=pic_remoto; User ID=Acaymo; Password=Metaconta2009; Allow Zero Datetime=True; CHARSET=latin1");
        cn.open();

        MySqlCommand cm = new MySqlCommand();
        cm.CommandText = sql;
        cm.CommandType = CommandType.Text;
        cm.Connection = cn;
        cm.Parameters.Add("ID", MySqlDbType.Int32);
        // cm.Parameters("ID").Value = 2006;
       
        MySqlDataAdapter da = new MySqlDataAdapter(cm);

        DataSet ds = new DataSet();
        da.Fill(ds);
        dgv.datasource = ds.Tables(0).DefaultView;

    }

    pero algunas aclaraciones.

    -el parametro si bien lo estas declarando pude ver que has comentado la linea en donde le pasas el valor, prueba descomentandola, y asignandole un valor que sepas dara datos de resultado.


    si el fidne me hago un rato vere de tomar tu ultimo link en dodne compartes el codigo y armar algo un poco ams probado, asi tienes una base mas solida para continuar

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Metaconta miércoles, 29 de julio de 2009 8:07
    viernes, 24 de julio de 2009 12:47
  • private void timer_log_Tick(object sender, EventArgs e)
            {
                string sql = "SELECT * FROM 'log' WHERE ID='1'";
    
                MySqlConnection cn = new MySqlConnection("Data Source=localhost; Database=pic_remoto; User ID=Acaymo; Password=Metaconta2009; Allow Zero Datetime=True; CHARSET=latin1");
                cn.open();
    
                MySqlCommand cm = new MySqlCommand();
                cm.CommandText = sql;
                cm.CommandType = CommandType.Text;
                cm.Connection = cn;
                cm.Parameters.Add("ID", MySqlDbType.Int32);
                // cm.Parameters("ID").Value = 2006;
    
                MySqlDataAdapter da = new MySqlDataAdapter(cm);
    
                DataSet ds = new DataSet();
                da.Fill(ds);
                dgv.datasource = ds.Tables(0).DefaultView;
            }
    La verdad que aún no lo logro.

    http://xgaa0a.blu.livefilestore.com/y1pGQmgSjBpnwnjdxlmrWl4d6zMmf3eEMWj-ZM1-d18j-3ak_IKEzdOXrtGtHqT2c5PpcBUGVAzhX-S_jz-HGnro2RTwbtDb1dE/MySQL12_v0.4.rar?download

    A ver si acabo esto ya que es lo único que me falta.

    Saludo.
    viernes, 24 de julio de 2009 18:29
  • mm esto es lo mismo del otro post?


    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Blog Técnico
    viernes, 24 de julio de 2009 20:17
    Moderador
  • hola

    si es bastante similar, solo que no tiene los default, ni la creacion de los objetos de conexion al principio del evento.

    has verificado que el select devuelve datos ?
    y que la grilla tiene la propiedad para autogenerar las columnas


    Nota: el link de descarga no me funciono


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 24 de julio de 2009 20:29
  • Hola:

    DESCARGAR

    Saludo.
    • Editado Metaconta lunes, 27 de julio de 2009 12:02
    sábado, 25 de julio de 2009 11:20
  • Quizás este código que he encontrado en este enlace ayude.

    private void PopulateDataGridView()
        {
    
            string[] row0 = { "11/22/1968", "29", "Revolution 9", 
                "Beatles", "The Beatles [White Album]" };
            string[] row1 = { "1960", "6", "Fools Rush In", 
                "Frank Sinatra", "Nice 'N' Easy" };
            string[] row2 = { "11/11/1971", "1", "One of These Days", 
                "Pink Floyd", "Meddle" };
            string[] row3 = { "1988", "7", "Where Is My Mind?", 
                "Pixies", "Surfer Rosa" };
            string[] row4 = { "5/1981", "9", "Can't Find My Mind", 
                "Cramps", "Psychedelic Jungle" };
            string[] row5 = { "6/10/2003", "13", 
                "Scatterbrain. (As Dead As Leaves.)", 
                "Radiohead", "Hail to the Thief" };
            string[] row6 = { "6/30/1992", "3", "Dress", "P J Harvey", "Dry" };
    
            songsDataGridView.Rows.Add(row0);
            songsDataGridView.Rows.Add(row1);
            songsDataGridView.Rows.Add(row2);
            songsDataGridView.Rows.Add(row3);
            songsDataGridView.Rows.Add(row4);
            songsDataGridView.Rows.Add(row5);
            songsDataGridView.Rows.Add(row6);
    
            songsDataGridView.Columns[0].DisplayIndex = 3;
            songsDataGridView.Columns[1].DisplayIndex = 4;
            songsDataGridView.Columns[2].DisplayIndex = 0;
            songsDataGridView.Columns[3].DisplayIndex = 1;
            songsDataGridView.Columns[4].DisplayIndex = 2;
        }
    
    

    domingo, 26 de julio de 2009 11:31
  • hola,

    me pude hacer un ratito, y modificar el codigo para dejar andando la grilla, como veras solo faltaban algunos detalles para dejarla andando.

    link

    te paso algunos comentarios:

    - me base en una version que espero sea la ultima, los link note que caducaron, por eso me parece que no es la ultima version que publicaste, pero igual para el ejemplo sirve. Te recomiendo que hagas uso de skydrive te da 25Gb de almacenamiento para poder subir tu material y este no caduca, simplemente si tienes una cuanta de hotmail puedes usarlo, es donde subo normalmente el material a compartir

    - bien con respecto a la grilla le faltaban algunos detalles, el primero es la propiedad AutoGenerateColumns, como veras la puse en el codigo en false. Si la dejas en true querra generar las columnas de forma dinamica no tomandote las que tu definas, como en este caso.

    - si visualizas el cuadro de edicion de columnas del datagridview, veras una propiedad por columna muy importante que te falto especificar, esta es "DataPropertyName", alli deberas colocar el nombre del atributo con el que quieres bindear la columna desde tu origen de datos. Basicamente es el nombre de tu columna en el DataTable.

    - te recomiendo verifiques la consulta sql, yo no tenia la estructura del la tabla "log" a mano asi que lo hice con otro tabla para probar que todo funcione, me parecio raro que la tabla "log" tenga un campos de nombre "cursoAcademico", por eso te recomiendo verificar quee ste correcto.

    - para no usar un timer yo implemente todo en el evento de un boton, prueba que todo funcione y si es asi puedes pasar la implementacion al timer si lo necesitas.


    bueno espero funcione todo bien, cualquier cosita la revisamos.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 27 de julio de 2009 2:40
  • Muchas gracias por tu tiempo y esfuerzo.

    Me extraña que no te dieras cuenta que use el SkyDrive que es precisamente el que uso y m erecomendaste hace un tiempo.

    Otra cosa, no encuentro la propiedad AutoGenerateColumns que has modificado.

    Lo puse así, no se si realmente está bien.
    private void btnLoadGrid_Click(object sender, EventArgs e)
            {
                string sql = "SELECT * FROM 'log' WHERE 1 = @ID";
    
                MySqlConnection cn = new MySqlConnection("Data Source=localhost; Database=pic_remoto; User ID=Acaymo; Password=Metaconta2009;");
                cn.Open();
    
                MySqlCommand cm = new MySqlCommand();
                cm.CommandText = sql;
                cm.CommandType = CommandType.Text;
                cm.Connection = cn;
                cm.Parameters.Add("ID", MySqlDbType.Int32);
                cm.Parameters["ID"].Value = 1;
    
                MySqlDataAdapter da = new MySqlDataAdapter(cm);
    
                DataSet ds = new DataSet();
                da.Fill(ds);
    
                dataGridView1.AutoGenerateColumns = false;
                dataGridView1.DataSource = ds.Tables[0];
            }


    DESCARGA

    Me he dado cuenta que el primer día funciona la descarga, al día siguiente no y no se el motivo con el SkyDrive, lo tengo en modo público.

    REcuerda, aquí no he tocado nada del la propiedad AutoGenerateColumns.

    Voy analizar el código y gracias de nuevo, luego te aviso a ver que tal me sale.
    • Editado Metaconta lunes, 27 de julio de 2009 12:33
    lunes, 27 de julio de 2009 6:34
  • hola,

    la propiedad esta especificada en esta linea:
    dataGridView1.AutoGenerateColumns = false;

    esta justo arriba de esta ultima "dataGridView1.DataSource = ds.Tables[0];"

    es la anteutlima linea.

    si te comentaba lo del skydrive porque los links que publicaste son muy distintos a los que estoy utilizando, estas seguro quee s skydrive el que usas ?
    revisa con los link que te pase, y verifica cuando descargas del link que te apso que la pagina tenga el mismo estilo.

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 27 de julio de 2009 13:00
  • Ya lo vi los código sque dices.

    http://xqah0a.blu.livefilestore.com/y1pS7I4HvycJ1_d7eFcITmdONnyTnmvP7tcybTVQIj5hklCf8B3LdJjJ3S0nsqC2K0l3vZGOTVfpGNv6euur6QarrlF6qjl8as6/MySQL12_v0.5.rar?download

    Con este enlace me funciona y es el SyDrive de mi hotmail. Mira ver si lo puedes bajar. Ahora mismo si se descarga en mi PC.

    Otra vez el mismo enlace.
    http://xqah0a.blu.livefilestore.com/y1pS7I4HvycJ1_d7eFcITmdONnyTnmvP7tcybTVQIj5hklCf8B3LdJjJ3S0nsqC2K0l3vZGOTVfpGNv6euur6QarrlF6qjl8as6/MySQL12_v0.5.rar?download

    Saludo.

    lunes, 27 de julio de 2009 13:06
  • hola,

    cuando estes viendo el skydrive que url estas publicando ?

    o sea seleccionas la del link de download o la que ves en la barra de direcciones de tu IE ?

    comparala con la que yo te pase deberia ser similar y sin el ?download al final

    fijate que al costado deberias tener algunso textbox y unid e ellos te da la direccion de publicacion,
    deberias ver una pantalla no directamente la descarga

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 27 de julio de 2009 13:21

  • excelente ese el el link correcto.


    pudiste probar la solucion que envie ?

    te funciono correctamente ?


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 27 de julio de 2009 13:37
  • Me da error, m el ajuego que es algo del MySQL que no hice bien.



    No se controló MySql.Data.MySqlClient.MySqlException
      Message="Algo está equivocado en su sintax cerca ''log' WHERE 1 = 1' en la linea 1"
      Source="MySql.Data"
      ErrorCode=-2147467259
      Number=1064
      StackTrace:
           en MySql.Data.MySqlClient.MySqlStream.ReadPacket()
           en MySql.Data.MySqlClient.NativeDriver.ReadResult()
           en MySql.Data.MySqlClient.ResultSet.NextResult()
           en MySql.Data.MySqlClient.MySqlDataReader.NextResult()
           en MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
           en MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
           en System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
           en System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
           en System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
           en System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
           en MySQL12.Form1.btnLoadGrid_Click(Object sender, EventArgs e) en C:\Documents and Settings\Hunter\Mis documentos\Descargas\MySQL12_p\MySQL12\MySQL12\Form1.cs:línea 241
           en System.Windows.Forms.Control.OnClick(EventArgs e)
           en System.Windows.Forms.Button.OnClick(EventArgs e)
           en System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
           en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
           en System.Windows.Forms.Control.WndProc(Message& m)
           en System.Windows.Forms.ButtonBase.WndProc(Message& m)
           en System.Windows.Forms.Button.WndProc(Message& m)
           en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           en System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
           en System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
           en System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           en System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           en System.Windows.Forms.Application.Run(Form mainForm)
           en MySQL12.Program.Main() en C:\Documents and Settings\Hunter\Mis documentos\Descargas\MySQL12_p\MySQL12\MySQL12\Program.cs:línea 18
           en System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           en System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           en System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           en System.Threading.ThreadHelper.ThreadStart()
      InnerException:



    lunes, 27 de julio de 2009 13:42
  • si la tabla se llama log va sin comillas, es decir las comillas no se usan en el nombre de la tabla:

    sql = "SELECT * FROM alumnos WHERE cursoAcademico=@curso";
    
    cm.Parameters.Add("@curso", MySqlDbType.Int32);
    
    cm.Parameters("@curso").Value = 2006;
    


    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Blog Técnico
    lunes, 27 de julio de 2009 14:15
    Moderador
  • que consulta sql estas utilizando, podra ser esta:

     "SELECT * FROM log WHERE 1 = @ID"

    si es asi rcuerda que deberias replzar el 1 por el nombre de un campo de la tabla log

    algo como ser:

     "SELECT * FROM log WHERE ID = @ID"

    igualmente segun vi por ahi en la grilla querras mostrar todos los registro de esa tabla, para eso usa

    SELECT * FROM log


    Nota: algo que vi y me llamo la atencion es que en las pruenas que realice no utilce las comilas simples en el nombre de la tabla.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Metaconta miércoles, 29 de julio de 2009 8:08
    lunes, 27 de julio de 2009 14:24
  • Voy a probar. Puedes usar comillas de todo tipo.

    ´Hola´

    "Hola"

    'Hola'

    En MySQL está permitido.

    Mejor la cambio a comillas simples (') porque con el C# se le recomienda.

    Voy a esperimentar con tus datos.
    lunes, 27 de julio de 2009 15:06
  • Ahora me da este error.

    No se controló MySql.Data.MySqlClient.MySqlException
      Message="Algo está equivocado en su sintax cerca ''log'' en la linea 1"
      Source="MySql.Data"
      ErrorCode=-2147467259
      Number=1064
      StackTrace:
           en MySql.Data.MySqlClient.MySqlStream.ReadPacket()
           en MySql.Data.MySqlClient.NativeDriver.ReadResult()
           en MySql.Data.MySqlClient.ResultSet.NextResult()
           en MySql.Data.MySqlClient.MySqlDataReader.NextResult()
           en MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
           en MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
           en System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
           en System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
           en System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
           en System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
           en MySQL12.Form1.btnLoadGrid_Click(Object sender, EventArgs e) en C:\Documents and Settings\Hunter\Mis documentos\Descargas\MySQL12_p\MySQL12\MySQL12\Form1.cs:línea 241
           en System.Windows.Forms.Control.OnClick(EventArgs e)
           en System.Windows.Forms.Button.OnClick(EventArgs e)
           en System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
           en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
           en System.Windows.Forms.Control.WndProc(Message& m)
           en System.Windows.Forms.ButtonBase.WndProc(Message& m)
           en System.Windows.Forms.Button.WndProc(Message& m)
           en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           en System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
           en System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
           en System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           en System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           en System.Windows.Forms.Application.Run(Form mainForm)
           en MySQL12.Program.Main() en C:\Documents and Settings\Hunter\Mis documentos\Descargas\MySQL12_p\MySQL12\MySQL12\Program.cs:línea 18
           en System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           en System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           en System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           en System.Threading.ThreadHelper.ThreadStart()
      InnerException:



    El código que puse es:
    private void btnLoadGrid_Click(object sender, EventArgs e)
            {
                string sql = "SELECT * FROM 'log'";
    
                MySqlConnection cn = new MySqlConnection("Data Source=localhost; Database=pic_remoto; User ID=Acaymo; Password=Metaconta2009;");
                cn.Open();
    
                MySqlCommand cm = new MySqlCommand();
                cm.CommandText = sql;
                cm.CommandType = CommandType.Text;
                cm.Connection = cn;
                cm.Parameters.Add("ID", MySqlDbType.Int32);
                cm.Parameters["ID"].Value = 1;
    
                MySqlDataAdapter da = new MySqlDataAdapter(cm);
    
                DataSet ds = new DataSet();
                da.Fill(ds);
    
                dataGridView1.AutoGenerateColumns = false;
                dataGridView1.DataSource = ds.Tables[0];
            }

    lunes, 27 de julio de 2009 18:34
  • hola,

    prueba de lanzar el query si las comillas simples, solo para probar a veces las consultas que funcionan bien el mysql desde codigo no andan del todo bien.


    - otro punto elimina las lineas:

                cm.Parameters.Add("ID", MySqlDbType.Int32);
                cm.Parameters["ID"].Value = 1;
    ya que no tienes parametros en el query

    - has verificado que el conection string que apunta a la db sea el correcto, o sea estas apuntando a la db correcta ?

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Metaconta miércoles, 29 de julio de 2009 8:08
    lunes, 27 de julio de 2009 19:23
  • insisto , las comillas NO se usan en el nombre de la tabla, mucho menos comillas sencillas porque si asi fuera el motor no tendria como diferenciar entre el nombre de una tabla y una 'cadena' normal. A veces se usan comillas dobles para el nombre de la tabla pero solo en DB que soporten nombres de tabla con espacios o catacteres no ANSI.

    En definitiva: que select quieres hacer? que tablas? que campos? que filtros?




    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Blog Técnico
    lunes, 27 de julio de 2009 19:55
    Moderador
  • no utilices las dobles comillas salvo lo necesites y si tu tabla se llama log o estudiandes o cursos esta claro que no lo necesitas.


    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Mi Blog C# XNA Sistemas Operativos
    lunes, 27 de julio de 2009 19:59
    Moderador
  • Ok, entonces uso sólo una comilla o la que desees.
    lunes, 27 de julio de 2009 20:00
  • No , realmente nunca debes usar las comillas para el nombre de la tabla. si un día eso te vota error porque tu tabla tiene un nombre con espacios o usas la ñ o tildes ... ese día prueba con doble comilla ("SELECT * FROM \"table_name\" ")




    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Mi Blog C# XNA Sistemas Operativos
    lunes, 27 de julio de 2009 20:04
    Moderador
  • hola,

    en realdiad te aconsejo no utilices ningun caracter para las tablas.

    como bien comenta Juan Carlos estos son utilizados en casos en dodne el nombre de la tabla no respecta los nombres ANSI, como por ejemplo una tabla de nombre "Vendedores Zona"

    este tiene un espacio entonces se utiliza en el consulta del forma [Vendedores Zona], pero esto es para SQL Server.

    SELECT * FROM [Vendedores Zona]


    en tu caso por lo nombre de tablas que utilizas no creo que tengas problemas

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Metaconta miércoles, 29 de julio de 2009 8:08
    lunes, 27 de julio de 2009 20:05
  • No usar espacios, ni tildes. Lo tendré en cuenta.

    lunes, 27 de julio de 2009 20:09
  • Me he dado cuenta de una cosa. Debe haber algo en la tabla datos. Por ejemplo:

    --


    -- Volcar la base de datos para la tabla `log`
    --

    INSERT INTO `log` (`ID`, `RELE_1`, `RELE_2`, `RELE_3`, `RELE_4`, `USUARIO`, `FECHA_HORA`) VALUES
    (1, 0, 1, 0, 1, 'Acaymo@localhost', '2009-07-28 00:49:10');
    En caso de no incluirse datos dentro de la tabla Log, da problemas al pulsar el botón actualizar.

    Ahora lo curisoso que en el DataGridView me aparecen los datos invisibles.



    lunes, 27 de julio de 2009 23:59
  • hola,

    Analiza el ejemplo que te pase, alli esta solucionado el problema de porque estan en blanco.

    debe de ser porque no especificas la propiedad DataPropertyName de cada columna.

    revisa el ejemplo o agrega el query a la solucion que te pase para probar.

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 28 de julio de 2009 0:08


  • Se ve dos en pareja, el vacío y el lleno. Puse esto así, //dataGridView1.AutoGenerateColumns = false; y veo los datos.

    Link

    Saludo.
    martes, 28 de julio de 2009 0:14
  • Ya está resuelto, ya me funciona bien.

    Si te das cuenta. para que se vea bien las celdas, es decir, que estén bien ajustadas. ¿Cómo hago para que se ajusten bien?

    En las celdas de RELE_x es muy grande para lo que es, mejor decudirla un poco.

    Otra cosa, a la hora de guardar la hora_fecha en este campo, en MySQL te guarda horas, minutos y segundos (HH:MM:SS), en cambio es este DataGridView no se lee los segundos aunque esté guardados en MySQL, se queda en este formato, HH:MM.

    Link

    Saludo.
    martes, 28 de julio de 2009 11:04
  • hola,

    si revisdas las propiedades de definiciond e asl columnas del datagridview veras que estan las propiedades para permitir el ajuste automatico de las columnas o de especificar el ancho de las mismas.

    tambien veras que hay atributos en la columan para esocificar un formato, podrias utilizarlo en las fechas

    Cómo: Dar formato a datos en el control DataGridView de formularios Windows Forms

    este link te explcia como dar formato por codigo, pero bsuca las mismas propeidades desde las propeidades de la columna que seguro estan alli.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 28 de julio de 2009 12:53
  • Gracias, me he dado cuaneta que este datagridview, te crea hasta los propios campos leído desde la base de datos. ¿Cómo y dónde ajusto cada campo?

    gracias por als ayudas.
    martes, 28 de julio de 2009 12:59
  • hola,

    revise el codigo que subiste y pude notar que tienes la linea:

    //dataGridView1.AutoGenerateColumns = false;

    comentada

    esta es clave para que no te genere de forma automatica las columnas y tu puedas controlarlas y definir estilos y anchos de columan desde diseño

    o sea como veras en el ejemplo que te pase, las columnas las creo desde el diseño no deje que propia grilla las cree desde los datos de tu db.
    si lo haces asi podras controlar cada columna.

    de forma dinamica tambien se puede, pero bueno ahi la cosa ya es algo ams compleja porque debes hacer todo por codigo.

    Prueba como en el codigo que te envie declarar cada columna, igualmente tu conoces cuales te estan llegando desde la db.
    Nota, no te olvide de definir el atributo "DataPropertyName" en cada columna.

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 28 de julio de 2009 16:30
  • hola, por favor cualquier inquietud nueva acerca del tema colocala en un hilo nuevo-.



    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Mi Blog C# XNA Sistemas Operativos
    martes, 28 de julio de 2009 20:41
    Moderador