Usuario
Cargar Datos en un datagrid

Pregunta
-
Todas las respuestas
-
Hola, bueno básicamente yo te puedo sugerir dos maneras:
- 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.
- 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
-
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
-
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
-
-
-
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
-
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
-
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