none
Generar Crystal Report desde datagriedView RRS feed

  • Pregunta

  • Hola amigos, recurro a ustedes por que tengo una duda al generar un crystal report  con los datos de un datagridview, solo quiero que me tome los valores de las celdas seleccionadas (en el datagridview tengo una columna checkbox).

    Realize un dataset al cual le agrege la cantidad de columnas que tiene mi datagridview, y cree un crystalReport donde inserte las columnas del data set creado.

    //DsRep=dataset creado

    //dataGridView1= Nombre de grilla

    //crRep.rpt= Nombre de crystalReport

                DsRep ds = new DsRep();

               // int filas = dataGridView1.Rows.Count;
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    if (Convert.ToBoolean(row.Cells[0].Value))
                    {
                        int filas = dataGridView1.Rows.Count;
                        for (int i = 0; i <= dataGridView1.SelectedRows.Count; i++)
                        {
                            ds.Tables[0].Rows.Add
                                (new object[] { dataGridView1[1,i].Value.ToString(),
                            dataGridView1[2,i].Value.ToString(),
                            dataGridView1[3,i].Value.ToString(),
                            dataGridView1[4,i].Value.ToString(),
                            dataGridView1[5,i].Value.ToString(),
                            dataGridView1[6,i].Value.ToString(),
                            dataGridView1[7,i].Value.ToString(),
                            dataGridView1[8,i].Value.ToString(),
                            dataGridView1[9,i].Value.ToString(),
                            dataGridView1[10,i].Value.ToString(),
                            dataGridView1[11,i].Value.ToString(),
                            dataGridView1[12,i].Value.ToString()
                        });
                        }
                    }
                }
                ReportDocument oRep = new ReportDocument();
                oRep.Load("/crRep.rpt");
                oRep.SetDataSource(ds);
                crystalReportViewer1.ReportSource=oRep;

    Espero que me puedan ayudar Saludos Gracias.


    • Editado Jnavarrete92 domingo, 22 de noviembre de 2015 22:18 falta informacion en la descripcion del problema
    domingo, 22 de noviembre de 2015 20:09

Respuestas

  • hola

    pero porque usas dos for para recorrer, deberia ser solo uno

    foreach (DataGridViewRow row in dataGridView1.SelectedRows)
    {
    	if (Convert.ToBoolean(row.Cells[0].Value))
    	{
    		ds.Tables[0].Rows.Add
                    (new object[] { row.Cells[1].Value.ToString(),...

    tampoco queda claro porque recorrer solo las seleccionadas si defines un check para indicar cuales tomar, deberia ser una opcion un otra, o tomas las seleccionadas y descartas el check o usas el chck y recorres todas las rows

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 23 de noviembre de 2015 1:39

Todas las respuestas

  • hola

    pero porque usas dos for para recorrer, deberia ser solo uno

    foreach (DataGridViewRow row in dataGridView1.SelectedRows)
    {
    	if (Convert.ToBoolean(row.Cells[0].Value))
    	{
    		ds.Tables[0].Rows.Add
                    (new object[] { row.Cells[1].Value.ToString(),...

    tampoco queda claro porque recorrer solo las seleccionadas si defines un check para indicar cuales tomar, deberia ser una opcion un otra, o tomas las seleccionadas y descartas el check o usas el chck y recorres todas las rows

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 23 de noviembre de 2015 1:39
  • Hola Leandro gracias por responder, lo que sucede es que debo mostrar en el reporte las celdas que seleccione el usuario, por esa razon tengo un check. Con la ayuda que me comentaste si selecciono un registro me lo muestra en el report pero si selecciono mas de uno solo se muetra el primero. Tengo que recorrer nuevamente que estoy haciendo mal. Gracias nuevamente por tu tiempo.

                foreach (DataGridViewRow row in dataGridView1.SelectedRows)
                {
                    if (Convert.ToBoolean(row.Cells[0].Value))
                    {
                            ds.Tables[0].Rows.Add
                                (new object[] { row.Cells[1].Value.ToString(),
                                     row.Cells[2].Value.ToString(),
                                      row.Cells[3].Value.ToString(),
                                       row.Cells[4].Value.ToString(),
                                        row.Cells[5].Value.ToString(),
                                        row.Cells[6].Value.ToString(),
                                        row.Cells[7].Value.ToString(),
                                        row.Cells[8].Value.ToString(),
                                        row.Cells[9].Value.ToString(),
                                         row.Cells[10].Value.ToString(),
                                          row.Cells[11].Value.ToString(),
                                           row.Cells[12].Value.ToString(),
    
                        });
    
                    }
                }

    Me seleccionaba solo la celda seleccionada por la instruccion que le daba el el foreach*, pero la cambie por un Rows y ahora me recorre y muestra todos los check seleccionados en mi datagridview. Gracias nuevamente Leandro como siempre ayudando. Saludos.


    • Editado Jnavarrete92 lunes, 23 de noviembre de 2015 2:26 Solucion
    lunes, 23 de noviembre de 2015 2:16