none
como insertar dos tablas en un gridview RRS feed

  • Pregunta

  • hola

    tengo un gridview el cual tiene dos tablas relacionadas el problema es que no se como hacer para insertar las dos tablas desde el gridview alguien tiene una idea muchas gracias

    lunes, 20 de junio de 2011 14:39

Respuestas

  • Hola,

    Depende de como estes trabajando, pero podrías optar por alguna de las siguientes opciones:

    1. Hacer un LEFT JOIN emtre las dos tablas.
    2. Si utilizas Datasets, puedes hacer un Merge: http://weblogs.asp.net/raminassar/archive/2008/12/14/6804281.aspx
    3. Crear un DataTable personalizado:
        Datatable dt1 = new Datatable();
        dt1.Columns.Add(Col1);
        dt1.Columns.Add(Col2);
     
        dt1.Rows.Add("Val1","Val2");
        dt1.Rows.Add("Val3","Val4");
     
    
        Datatable dt2 = new Datatable();
        dt2.Columns.Add(Year);
        dt2.Columns.Add(Month);
     
        dt2.Rows.Add("2001","Jan");
        dt2.Rows.Add("2002","Feb");
     
    
        Datatable dtFinal = new Datatable();
        dtFinal .Columns.Add(Col1);
        dtFinal .Columns.Add(Col2);
        dtFinal .Columns.Add(Year);
        dtFinal .Columns.Add(Month);
        dtFinal .Rows.Add("Val1","Val2","2001","Jan");
        dtFinal .Rows.Add("Val3","Val4","2002","Feb");
     
    
        myDatagrid.DataSource = dtFinal;
        myDatagrid.DataBind();


    La cuestión es juntar los datos de la forma que vaya mejor a tus necesidades concretas.

    Saludos,

    JA Reyes.


    Please remember to Vote & "Mark As Answer" if this post is helpful to you.
    Por favor, recuerda Votar y "Marcar como respuesta" si la solucion de esta pregunta te ha sido útil.

    • Marcado como respuesta stefyherrera lunes, 20 de junio de 2011 15:33
    lunes, 20 de junio de 2011 14:51

Todas las respuestas

  • Hola,

    Depende de como estes trabajando, pero podrías optar por alguna de las siguientes opciones:

    1. Hacer un LEFT JOIN emtre las dos tablas.
    2. Si utilizas Datasets, puedes hacer un Merge: http://weblogs.asp.net/raminassar/archive/2008/12/14/6804281.aspx
    3. Crear un DataTable personalizado:
        Datatable dt1 = new Datatable();
        dt1.Columns.Add(Col1);
        dt1.Columns.Add(Col2);
     
        dt1.Rows.Add("Val1","Val2");
        dt1.Rows.Add("Val3","Val4");
     
    
        Datatable dt2 = new Datatable();
        dt2.Columns.Add(Year);
        dt2.Columns.Add(Month);
     
        dt2.Rows.Add("2001","Jan");
        dt2.Rows.Add("2002","Feb");
     
    
        Datatable dtFinal = new Datatable();
        dtFinal .Columns.Add(Col1);
        dtFinal .Columns.Add(Col2);
        dtFinal .Columns.Add(Year);
        dtFinal .Columns.Add(Month);
        dtFinal .Rows.Add("Val1","Val2","2001","Jan");
        dtFinal .Rows.Add("Val3","Val4","2002","Feb");
     
    
        myDatagrid.DataSource = dtFinal;
        myDatagrid.DataBind();


    La cuestión es juntar los datos de la forma que vaya mejor a tus necesidades concretas.

    Saludos,

    JA Reyes.


    Please remember to Vote & "Mark As Answer" if this post is helpful to you.
    Por favor, recuerda Votar y "Marcar como respuesta" si la solucion de esta pregunta te ha sido útil.

    • Marcado como respuesta stefyherrera lunes, 20 de junio de 2011 15:33
    lunes, 20 de junio de 2011 14:51
  • o sea serian dos gridview anidados, como esto

    ExtGridView


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 20 de junio de 2011 14:57
  • Saludos,

    JA Reyes.

    soy nuevo en asp.net y como seria la misma pero tamando datos de una base de datos, no introduciendolos manual.

    te agradeceria mucho si me puedes ayudar ya que estoy intentandolo hacer y no he podido me estoy matando la cabeza.

    necesito eso para generar un archivo exportable a Excel con datos de diferentes tablas

    para este caso necesito generar un excel con el nombre del usuario y el titulo del libro
    miércoles, 17 de octubre de 2012 21:29
  • Pues la manera en que yo hago para que me muestre datos de dos tablas relacionadas es unir las dos tablas en la consulta SQL. Te pongo como lo haria con tu tus 3 tablas:

    String CadenaString = "Data Source = ----------; Initial Catalog = ------------; User ID = -------; Password = ---------";
    SqlConnection Conexion = new SqlConnection(CadenaString);
    SqlCommand Comand = new SqlCommand("SELECT Usuario.Nombre, Libro.Titulo, Comentario FROM Prestamos, Libro, Usuario WHERE Prestamos.LibroId = Libro.LibroId AND Prestamos.UsuarioId = Usuario.UsuarioId", Conexion);
    
    SqlDataAdapter Ada = new SqlDataAdapter(Comand);
    
    DataTable DT = new DataTable();
    
    Conexion.Open();
    
    Ada.Fill(DT);
    GridView1.DataSource = DT;
    GridView1.DataBind();
    Conexion.Close();

    Y listo, este es la forma que utilizo si quiero mostrar un dato de otra tabla por medio de una. (Dios bendiga a las llaves foráneas xD)

    jueves, 18 de octubre de 2012 13:06
  • Hola deivis gracias por contestar, pero como te dije soy muy nuevo y aunque entiendo tu codigo no se donde deberia escribirlo.

    el link de abajo es de mi ejemplo donde stoy intentando hacer la exportacion a excel de campos combinados.

    te agardeceria si lo miras y me ilustras mas.

    ya que me estoy matando la cabeza yo se que no es muy complicado pero no he podido

    muchas gracias.

    https://skydrive.live.com/redir?resid=EE66AA59692ADE74!214
    jueves, 18 de octubre de 2012 13:50
  • Yokcar: Lo que quieres es exportar a excel tu consulta sql, bueno te pondré como lo hago yo, no es nada difícil simplemente creas un Button y en su evento click le pones el código. Aquí te muestro el ejemplo.

    <asp:Button ID="btnExcel" runat="server" Text="Generar Archivo Excel" onclick="btnExcel_Click" />

    protected void btnExcel_Click(object sender, EventArgs e)
            {
                // Crear un objeto SqlConnection, y luego pasar la ConnectionString al constructor.            
                SqlConnection Conection = new SqlConnection(CadenaString);
    
                // Utilizar una variable para almacenar la instrucción SQL.
                string SelectString = "SELECT Usuario.Nombre, Libro.Titulo, Comentario FROM Prestamos, Libro, Usuario WHERE Prestamos.LibroId = Libro.LibroId AND Prestamos.UsuarioId = Usuario.UsuarioId";
    
                SqlDataAdapter Adaptador = new SqlDataAdapter(SelectString, Conection);
    
                DataSet DS = new DataSet();
    
                // Abrir la conexión.
                Conection.Open();
                Adaptador.Fill(DS);
                Conection.Close();            
    
                if (DS.Tables[0].Rows.Count == 0)
                {            
                    DS.Dispose();
                    string script = @"<script type='text/javascript'>alerta();</script>";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
                }
                else
                {
                    System.IO.FileStream ostrm;
    
                    String sFilename = "Informe.csv";
                    System.IO.File.Delete(Page.MapPath(sFilename));
                    ostrm = new System.IO.FileStream(Page.MapPath(sFilename), System.IO.FileMode.Append);
                    System.IO.StreamWriter sw = new System.IO.StreamWriter(ostrm, System.Text.Encoding.Unicode);
                    String s = " ";
    
                    for (int i = 0; i < DS.Tables[0].Columns.Count; i++)
                    {
                        s = s + DS.Tables[0].Columns[i].ColumnName + "\t";
                    }
    
                    sw.WriteLine(s.TrimEnd(','));
                    s = " ";
                    for (int i = 0; i < DS.Tables[0].Rows.Count; i++)
                    {
                        for (int j = 0; j < DS.Tables[0].Columns.Count; j++)
                        {
                            s = s + HttpUtility.HtmlDecode(DS.Tables[0].Rows[i][j].ToString()) + "\t";                        
                        }
                        sw.WriteLine(s.TrimEnd(','));
                        s = " ";
                    }
                    sw.Close();
                    Response.Clear();
                    Response.AddHeader("content-disposition", "attachment;filename=Informe.csv");
                    Response.Charset = "";
                    Response.Cache.SetCacheability(HttpCacheability.NoCache);
                    Response.ContentType = "application/vnd.csv";
                    Response.Charset = "UTF-8";
                    Response.ContentEncoding = System.Text.Encoding.Unicode;
                    Response.Redirect(sFilename, false);                
                }                                 
            }

    <script type="text/javascript">               
            function alerta() {            
                alert('No hay datos en la tabla en estos momentos');            
            }            
    </script>

    y así es que realizo un exportable de una consulta SQL a un .csv
    • Editado Deivis Andres H jueves, 18 de octubre de 2012 14:05
    • Propuesto como respuesta Yokcar jueves, 18 de octubre de 2012 14:17
    jueves, 18 de octubre de 2012 14:03
  • hola deivis, tu ayuda a sido muy util, pero yo estoy utilizando una estructura mvc... si pudieras ver el codigo que esta en el siguiente enlace:  https://skydrive.live.com/redir?resid=EE66AA59692ADE74!214

    carpeta Controller

    clase prestamos

    te daras cuenta que no puedo utilizar Botones de accion ya que no utilizo Web From.

    analizando mi problema tendria que modificar el metodo

        private List<Prestamos> ObtenerLista(IOrderedQueryable<Prestamos> lista)
            {
                return lista.ToList();
            }

    para que me traiga el nombre y el titulo pero no se como se deberia hacer.

    debe ser algo asi pero me esta generando error

    private List<Prestamos> ObtenerLista(IOrderedQueryable<Prestamos> lista1)
            {
                var lista = "SELECT Usuario.Nombre, Libro.Titulo, Comentario FROM Prestamos, Libro, Usuario WHERE Prestamos.LibroId = Libro.LibroId AND Prestamos.UsuarioId = Usuario.UsuarioId";
                return lista.ToList();
            }

    • Editado Yokcar jueves, 18 de octubre de 2012 16:15
    jueves, 18 de octubre de 2012 16:02
  • Pero un error en la sentencia Sql ?
    jueves, 18 de octubre de 2012 16:18
  • no la sentencia esta bien escriba , es como un erro en la signacion


    • Editado Yokcar jueves, 18 de octubre de 2012 16:31
    jueves, 18 de octubre de 2012 16:29
  • Disculpa pero en la parte que pones private List<Prestamos> ObtenerLista(IOrderedQueryable<Prestamos> lista1) no seria de esta manera:

    private List<Prestamos> ObtenerLista(List<Prestamos> lista)


    jueves, 18 de octubre de 2012 16:55