none
estoy tratando de usar un reportviewer para mostrar un List<string> RRS feed

  • Pregunta

  • trabajo en winform

    genere un listado y lo almacene en un List<string>

    por lo que lei le puedo asignar dicho listado a un report viewer, esto es lo que hice:

    public FormReporte(string awTitulo, List<string> awListReporte)
            {
                InitializeComponent();
                reportViewer1.LocalReport.DataSources.Clear();
                ReportDataSource rds = new ReportDataSource(awTitulo, awListReporte);
                rds.Value = awListReporte;
                this.reportViewer1.LocalReport.DataSources.Add(rds);
                this.reportViewer1.LocalReport.Refresh();
                this.reportViewer1.RefreshReport();
            }

    me da el siguiente error: "No se ha especificado el origen de la definición de informe"

    por lo que he buscado en internet, yo debo agregar un rdlc (Crear archivos de definición de informe de cliente (.rdlc).)

    pero yo quiero mostrar listados obtenidos de diferentes tablas, entonces no puedo hacerlo para una tabla determinada.

    además el listado ya está formateado, solo deseo mostrarlo, existe alguna forma para que no necesite la definicion de informe o asignarle una en blanco digamos.


    Hugo González (Macgyber)

    • Cambiado Karen Malagón jueves, 4 de febrero de 2016 21:26 Windows Forms issue
    sábado, 30 de enero de 2016 12:13

Todas las respuestas

  • Un reporte con un List<string> no lo veo viable

    Deberias definir algun tipo de datos como una clase para poder usar esta de modelo, entonces si definir un List<classCustom>

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 30 de enero de 2016 12:50
  • Dices que "el listado ya está formateado". La pregunta es ¿DÓNDE está formateado? Los listados se formatean guardando el formato dentro de un .rdlc. Por lo tanto, si "ya está formateado" significa que ya tienes el .rdlc. El mensaje de error que estás viendo te informa de que se te ha olvidado asignarle ese .rdlc al reportViewer1.

    Esto no tiene nada que ver con lo de "mostrar listados obtenidos de diferentes tablas". Los datos se extraen de las tablas por programación, y se cargan en un DataSet. Y después, ese dataset (que tiene datos de la tabla que sea) se asigna a los datasources del reportViewer, con el fin de que dichos datos se presenten en pantalla formateados conforme con el formato que especifique el .rdlc.

    sábado, 30 de enero de 2016 12:53
  • Alberto Poblacion, yo leo una tabla y genero el listado (cabecera, renglones y pie)

    la información la voy encolumnando agregando espacios necesarios (uso font Courier New que tiene ancho fijo)

    por lo que vi en internet es posible asignar un List<string> pues es una clase enumerable.

    el listado que voy a generar tiene un unico dato a mostrar que es un string (de largo variable)

    como podria hacer un .rdlc que acepte dicho string ?

    Leandro Tuttini estoy entendiendo bien esto:

    Value may be an instance of System.Data.DataTable, a System.Collections.IEnumerable value (for example, System.Data.DataViewor System.Array), a System.Windows.Forms.BindingSource (for the Microsoft Windows Form control), or aSystem.Web.UI.IDataSource (for the ASP.NET server control).

    If this value is an instance of System.Collections.IEnumerable, all elements in the collection must be of the same type, and names of the public properties of the element (as retrieved by the System.ComponentModel.TypeDescriptor.GetProperties() method) must match the field names of the corresponding report data source.

    Value may also be an instance of System.Type. In this case, an instance of the supplied type is automatically created and added to an automatically created collection.

    If the type of Value is not any of the aforementioned types, it is added to an automatically created collection.


    Hugo González (Macgyber)

    sábado, 30 de enero de 2016 13:22
  •                          LISTADO DE VALORES DEL DÓLAR
                                                          99999 / 99999
    
    AÑO            MES 01              MES 02              MES 03
                   MES 04              MES 05              MES 06
                   MES 07              MES 08              MES 09
                   MES 10              MES 11              MES 12
    
    9999      99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
    
    9999      99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
    
    9999      99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
    
    9999      99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
    
    9999      99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
    
    9999      99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
    
    9999      99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
    
    9999      99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
    
    9999      99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
    
    9999      99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
    
    
    
                                                          99999 / 99999
              99999.99999999999   99999.99999999999   99999.99999999999
              99999.99999999999   99999.99999999999   99999.99999999999
                             FIN DE PÁGINA
    

    este es el listado generado con 3 tipos de datos: literales (son datos fijos, se pueden leer), texto (son datos alfanumericos que se representan con xxxx y numericos que se representan con 9999 y punto para el punto decimal

    esto en el caso de la factura serviria para darle a la imprenta para que realice la factura respetando los anchos y alturas

    este otro seria el mismo listado pero con valores reales:

                             LISTADO DE VALORES DEL DÓLAR
                                                          1     / 5
    
    AÑO            MES 01              MES 02              MES 03
                   MES 04              MES 05              MES 06
                   MES 07              MES 08              MES 09
                   MES 10              MES 11              MES 12
    
    1969        248.00000000000     248.00000000000     248.00000000000
                248.00000000000     248.00000000000     248.00000000000
                248.00000000000     248.00000000000     248.00000000000
                248.00000000000     248.00000000000     248.00000000000
    
    1970        248.00000000000     248.00000000000     248.00000000000
                248.00000000000     248.00000000000     248.00000000000
                248.00000000000     248.00000000000     248.00000000000
                248.00000000000     248.00000000000     248.00000000000
    
    1971        248.00000000000     248.00000000000     248.00000000000
                248.00000000000     248.00000000000     248.00000000000
                248.00000000000     248.00000000000     248.00000000000
                248.00000000000     248.00000000000     248.00000000000
    
    1972        248.00000000000     248.00000000000     495.00000000000
                519.00000000000     539.00000000000     566.00000000000
                566.00000000000     592.00000000000     641.00000000000
                673.00000000000     698.00000000000     725.00000000000
    
    1973        754.00000000000     815.00000000000     837.00000000000
                853.00000000000     853.00000000000     868.00000000000
                868.00000000000     868.00000000000     902.00000000000
                916.00000000000     928.00000000000     928.00000000000
    
    1974        947.00000000000     975.00000000000    1004.00000000000
               1073.00000000000    1073.00000000000    1119.00000000000
               1184.00000000000    1255.00000000000    1300.00000000000
               1378.00000000000    1488.00000000000    1640.00000000000
    
    1975       1793.00000000000    1901.00000000000    2022.00000000000
               2300.00000000000    2300.00000000000    2300.00000000000
                  2.30000000000       2.30000000000       2.34000000000
                  2.45000000000       2.55000000000       2.70000000000
    
    1976          2.78000000000       2.94000000000       2.94000000000
                  3.04000000000       3.15000000000       3.27000000000
                  3.40000000000       3.54000000000       3.61000000000
                  3.78000000000       3.92000000000       3.96000000000
    
    1977          4.06000000000       4.17000000000       4.27000000000
                  4.38000000000       4.50000000000       4.60000000000
                  4.71000000000       4.87000000000       4.96000000000
                  5.22000000000       5.36000000000       5.40000000000
    
    1978          5.45000000000       5.40000000000       5.48000000000
                  5.60000000000       5.75000000000       5.92000000000
                  6.20000000000       6.35000000000       6.54000000000
                  6.72500000000       6.89500000000       7.03600000000
    
    
    
                                                          1     / 5
              4498.29             4695.51             5114.69
              5502.02             5522.4              5610.79
                             FIN DE PÁGINA
    

    esta es la pagina 1 de un total de 5 y abajo hay totales (solo con fines de prueba de las cotizaciones de los meses 1,2,3 y 4,5,6)


    Hugo González (Macgyber)

    sábado, 30 de enero de 2016 13:46
  • bien bien, agregue un archivo de informe vacio y el codigo quedo así:

    public FormReporte(string awTitulo, List<string> awListReporte)
            {
                InitializeComponent();
                this.reportViewer1.LocalReport.DataSources.Clear();
                ReportDataSource rds = new ReportDataSource(awTitulo, awListReporte);
                this.reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\Report1.rdlc";
                this.reportViewer1.Name = "Report1";
                this.reportViewer1.ProcessingMode = ProcessingMode.Local;
                rds.Value = awListReporte;
                this.reportViewer1.LocalReport.DataSources.Add(rds);
                this.reportViewer1.LocalReport.Refresh();
                this.reportViewer1.RefreshReport();
            }

    ya no da error, pero no veo NADA

    cuando le hago debug veo que tomo las lineas, pero que estara faltando ? de que forma le digo que cada string del List<string> lo ponga en una linea ?


    Hugo González (Macgyber)

    sábado, 30 de enero de 2016 15:10
  • Pero sigues asignando una lista de string

     

    How to create local reports RDLC featuring barcode images in ASP.NET

    analiza el titulo "Using Custom Objects as data source of my local report" del articulo

    alli explica como puedes asignar una lista de un objeto que definas como origen de datos dwel reporte

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 30 de enero de 2016 15:46
  • agregue un archivo de informe vacio y el codigo quedo así [...] ya no da error, pero no veo NADA

    Seguramente no es exacto que no veas NADA. En realidad estás viendo TODO lo que pintaste en el archivo de informe. Claro, que si el archivo lo agregaste vacío, es lógico que la página se presente en blanco.

    Recuerda que el archivo de informe contiene la plantilla que indica lo que se verá en el informe. En esa plantilla tiene que haber ALGO que indique dónde deben aparecer los datos que le pases al informe en el momento de emitirlo. Puede ser una caja de texto que en su Expression tenga puesto un parámetro (y luego pasar los datos en ese parámetro), o puede ser un Table que esté vinculado a un DataSet (y que el nombre de ese DataSet coincida con el que le pasas con los datos al emitir el informe). Pero en cualquier caso, el informe tiene que estar bien diseñado y expresar correctamente cómo encajar los datos dentro de la página. En otras palabras, si quieres usar el ReportViewer no tienes más remedio que aprender a diseñar informes, aunque todos los datos del informe los construyas y formatees antes de pasárselos al informe.

    sábado, 30 de enero de 2016 16:13
  • casi casi lo consegui

    me rendi y deje de lado el List<string> (yo anteriormente lo metia en un formuario con richtextbox para mostrarlo) 

    public FormReporte(string awTitulo, List<string> awListReporte)
            {
                InitializeComponent();
                // creo un dataset y paso el List<string> al mismo
                DataSet ds = new DataSet("myDataSet");
                DataTable dt = new DataTable("myDataTable");
                dt.Columns.Add(new DataColumn("col1", typeof(string)));
    
                DataRow dr;
                foreach (string linea in awListReporte)
                {
                    dr = dt.NewRow();
                    dr["Col1"] = linea;
                    dt.Rows.Add(dr);
                }
                ds.Tables.Add(dt);
                List<clsTables> rowList = new List<clsTables>();
                rowList.Clear();
                foreach (DataRow row in dt.Rows)
                {
                    rowList.Add(new clsTables(row.ItemArray[0].ToString()));
                }
                BindingSource bs = new BindingSource();
                bs.DataSource = rowList;
    
                // cargo el dataset al reportViewer
                ReportDataSource rds = new ReportDataSource();
                rds.Name = "dsBody";
                rds.Value = bs;
                this.reportViewer1.Reset();
                this.reportViewer1.LocalReport.ReportEmbeddedResource = "FormReporte.rdlc";
                this.reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\FormReporte.rdlc";
                this.reportViewer1.LocalReport.DataSources.Clear();
                this.reportViewer1.LocalReport.DataSources.Add(rds);
                this.reportViewer1.RefreshReport();
            }
    
            // clase para cargar los reportes
            public class clsTables
            {
                public clsTables(string col0)
                {
                    this.Column0 = col0;
                }
    
                public string Column0 { get; set; }
            }

    luego utilizo la solución de esta consulta

    http://stackoverflow.com/questions/15778844/how-to-bind-datatable-to-reportviewer-runtime

    y quedó funcionando

    pero tengo 2 problemas:

    a) no se como hago para eliminar el titulo "Column0" que aparece arriba y que se imprime

    b) por error en la manipulacion modifique el alto de los renglones, como lo vuelvo al valor anterior yo estoy utilizando fuente courier new 10

    gracias por el interes de ambos (Alberto Poblacion y Leandro Tuttini)


    Hugo González (Macgyber)

    domingo, 31 de enero de 2016 8:38