none
Cargar Datos en un datagrid RRS feed

  • Pregunta

  • Buenas Tardes

    Como podría cargar datos de dos tablas de Base de datos distintas en un data grid, son tablas independientes y no estan relacionadas entre si

    con un data set cargo la primera tabla pero no se como cargar la segunda tabla

    Saludos

    martes, 6 de octubre de 2015 12:46

Todas las respuestas

  • Hola, bueno básicamente yo te puedo sugerir dos maneras:

    1. Directo en el DBMS puedes crear una vista, un sp, unión, o lo que necesites que te "Una" las dos tablas y luego la muestras desde tu presentación de la misma manera que hiciste con tu primera tabla.
    2. Otra manera es que obtengas dos datatable (una por cada tabla) en tu presentación y con LinQ las unas (con un join) para mostrarla en un grid, mira aquí te muestro un ejemplo:
                var resul = (from drDBI in tablaBDI.AsEnumerable()
                             join drCRM in tablaCRM.AsEnumerable()
                                 on drDBI.Field<int>("PosicionBDI") equals drCRM.Field<int>("posicionCRM")
                             select new
                             {
                                 NomColBDI = drDBI.Field<string>("NombreBDI"),
                                 NomColCRM = drCRM.Field<string>("NombreCRM"),
                                 PosicionBDI = drDBI.Field<int>("PosicionBDI"),
                                 PosicionCRM = drCRM.Field<int>("posicionCRM"),
                                 NullBDI = drDBI.Field<string>("NullBDI"),
                                 NullCRM = drCRM.Field<string>("NullCRM"),
                                 TipoBDI = drDBI.Field<string>("TipoBDI"),
                                 TipoCRM = drCRM.Field<string>("TipoCRM"),
                                 longitudBDI = drDBI.Field<int?>("longitudBDI"),
                                 longitudCRM = drCRM.Field<int?>("longitudCRM")
                             });
    
                gvComparaciones.DataSource = resul;
                gvComparaciones.DataBind();

    Donde tablaBDI y tablaCRM son dos datatable previamente obtenidos.


    Roy Sillerico

    martes, 6 de octubre de 2015 13:12
  • Muchas gracias Roy., pero no entiendo bien la respuesta

    Veo que haces un join, yo no quiero eso por que son tablas disitntas no tienen campo para hacer join

    Esta es la parte que carga mi cabecera

        public void leer_datos(string querypedido, string tabla, string queryweb, string tablaweb )
            {
                try
                {
                    MySqlConnection cn = new MySqlConnection(CadenaConexion); 

                    MySqlCommand cmd = new MySqlCommand(querypedido, cn); 
                    MySqlDataAdapter da = new MySqlDataAdapter(cmd);

                    da.Fill(resultados, tabla); 

                    BindingSource p = new BindingSource();
                    p.DataSource = resultados;
                    p.DataMember = tabla;


                    this.dataGridView1.DataSource = p;

                    da.Dispose();
                    cn.Close();
    ********Aqui es donde quiero cargar la otra tabla a la mismo datagridview

          //  MySqlConnection cn6 = new MySqlConnection(CadenaConexionGestion);
                    //MySqlConnection cn2 = new MySqlConnection(CadenaConexionGestion); 

                    //MySqlCommand cmd6 = new MySqlCommand(queryweb, cn2); 
                    //MySqlDataAdapter da6 = new MySqlDataAdapter(cmd6);

                    //da6.Fill(resultados, tablaweb); 

                    //BindingSource w = new BindingSource();
                    //w.DataSource = resultados;
                    //w.DataMember = tablaweb;


                    //this.dataGridView1.DataSource = w;

    Pero no lo hace si no que remplaza

    *****Esto lo tengo en el LOAD

           

     string querypedido = @"Select p.id, p.pedidokey, p.riqi, p.fecha_c,  p.kehuID, c.name, p.yewuyuanID, v.py, p.jinez 
                           from pedidolist p, kehu c, yewuyuan v
                         where p.kehuid = c.bianhao and p.yewuyuanID = v.bianhao          
                        Order by p.id desc";

                string queryweb = @"select c.pedidocodigo, c.cod_cliente, c.namecliente, c.cod_representante, c.representante, c.fecha_creacion,
                                    c.pedidokey, c.comentario, c.total  
           from  pedidocabeceraweb c  
    order by c.pedidocodigo";


               this.leer_datos(querypedido, "pedidolist", queryweb, "pedidocabeceraweb");

    Espero se comprenda amigo

    martes, 6 de octubre de 2015 13:43
  • A lo que veo en tus select, el resultado de ambos no es igual, me refiere a que sus columnas de los dos select no son del mismo tipo, si estoy en lo correcto no podrás unirlas, ya que el grid te acepta solo un tipo de origen. Sin embargo si los resultados de ambos query son del mismo número de columnas y las columnas son del mismo tipo de dato, puedes utilizar un UNION directo en el query y así mandar un único origen a tu grid. Ahora bien si quieres hacer algún tipo de artimaña para que si o si tu grid se llene con dos orígenes diferentes, tendrías que hacer una carga manual de tu grid, o sea por cada query tienes un datatable, manualmente recorres tus datatable (por ejemplo utilizando foreach) y mientras los vas recorriendo, los lees, y sus datos los adicionas manualmente al grid. Mmmmm espero haberme explicado bien.

    Roy Sillerico

    martes, 6 de octubre de 2015 13:57
  • En Visual fox pro ejemplo yo creaba un cursor y ahi iba cargando primero todos los datos de una tabla y luego los datos de la otra tabla

    Pero en c# no se como hacerlo :(

    martes, 6 de octubre de 2015 14:08
  • Te entiendo, bueno tal vez podrías optar por otra solución que no sea un solo grid, ya que un grid "normal" solo te aceptara un origen de datos y no dos. Desde mi punto de vista lo mas conveniente es utilizar dos grid.

    Roy Sillerico

    martes, 6 de octubre de 2015 14:25
  • Lo que pasa es mi amigo que tengo que conultar 6 tablas y cargarlos y luego cada uno tiene su detalle

    Ejemplo:

    Nº  Codigo     Fecha      total

    1   PED1001  01/01/01  1000

    2   PED1002 01/02/01  1580

    3   WEB001   01/02/02  1000

    4  PEN0001 

    5   DIP001

    ETC

    Todos esos Codigo los tiene que cargar de tablas distintas en la cabecera

    Entonces en Visual Fox lo que hacia es Create cursor y ahi cargaba todas mis consultas luego en la grilla cargaba solo el cursor ese

    saludos

    martes, 6 de octubre de 2015 14:44
  • Tal vez este articulo de Leandro te sirva:

    http://ltuttini.blogspot.com/2012/04/aspnetgridview-anidados-maestro-detalle.html

    Ahora bien, aparte del articulo, en tu lugar, yo vería la manera de unir las tablas en el SGBD, así simplificarías tu código en presentación.

    Mmmmm haber si el articulo no es de mucha ayuda, podrías proporcionar mas detalle y así poder ayudarte en la solución, mas detalle sobre los resultados de tus seis tablas, tal vez una captura de un Excel o el resultado de tu cursor.


    Roy Sillerico

    martes, 6 de octubre de 2015 14:57
  • Tal vez esta respuesta que encontré en el foro también te sirva:

    Pon los dos DataTables dentro de un DataSet, y añádele un DataRelation que defina las columnas que establecen la relación entre las dos tablas:

    https://msdn.microsoft.com/en-us/library/vstudio/ay82azad(v=vs.100).aspx

    Una vez que tengas el Dataset así configurado, haz el DataBinding del DataGridView contra el DataSet (en lugar de contra las tablas). De esa manera, el datagridview pondrá un "+" en cada registro y pinchando en él se puede navegar entre tablas.

    (Es una respuesta de Alberto población)

    tal vez esta otra también te sirva:

    https://ravisatyadarshi.wordpress.com/2013/10/04/cascade-gridview-in-asp-net/


    Roy Sillerico

    martes, 6 de octubre de 2015 16:14