none
Impresión en C# RRS feed

  • Pregunta

  • Buenas Tardes Amigos

    tengo que imprimir esto 


    Ya tenog todo lo unico que no me sale es el 1/3

    2/3

    3/3

    Asi lo tengo

    Como puedo hacer?


    ruben

    viernes, 30 de marzo de 2018 15:22

Respuestas

  • Si no es un valor por página, sino que es una numeración global por etiqueta, una cosa sencilla que podrías hacer es meter la numeración de cada etiqueta dentro del propio registro de datos que proporciona la información para hacer las etiquetas. Esto depende de cómo estés generando el DataSet, pero si es una simple sentencia SQL, puedes añadirle una columna más que contenga el Row_Number, e incluso si quieres puedes concatenarle una "/" y el Count(*) para que te devuelva directamente el texto a imprimir.
    viernes, 30 de marzo de 2018 16:40
    Moderador

Todas las respuestas

  • Si no es un valor por página, sino que es una numeración global por etiqueta, una cosa sencilla que podrías hacer es meter la numeración de cada etiqueta dentro del propio registro de datos que proporciona la información para hacer las etiquetas. Esto depende de cómo estés generando el DataSet, pero si es una simple sentencia SQL, puedes añadirle una columna más que contenga el Row_Number, e incluso si quieres puedes concatenarle una "/" y el Count(*) para que te devuelva directamente el texto a imprimir.
    viernes, 30 de marzo de 2018 16:40
    Moderador
  • Hola Alberto Excelente explicación :) pero como puedo hacer amigo un ejemplo

    saludos


    ruben

    martes, 3 de abril de 2018 8:37
  • Para hacer un ejemplo, lo ideal sería partir de la sentencia que estés usando ahora mismo (suponiendo que no sea muy complicada) para a partir de ahí añadirle la columna adicional de tal manera que use el nombre correcto de tabla y la sintaxis que encaje en ella correctamente.
    martes, 3 de abril de 2018 17:52
    Moderador
  • Hola Alberto

    Aque te refieres con sentencia

    YO solo tengo esto

    Una Clase llamada Etiquetas

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    
    namespace APLICACIONMPNAV.clases
    {
        public class Eetiquetas
        {
            public string nombre { get; set; }
            public string direccion { get; set; }
            public string telefono { get; set; }
            public string Texto { get; set; }
    
        }
    }
    

    Luego creo un dataset  y lo agrego al conjunto de Datos 

    Y la clase lo relleno asi

      string nombre = this.dgvembalaje_cabecera.CurrentRow.Cells[3].Value.ToString();
                string direccion = this.dgvembalaje_cabecera.CurrentRow.Cells[19].Value.ToString();
                string tel = this.dgvembalaje_cabecera.CurrentRow.Cells[20].Value.ToString();
    
              
                clases.Eetiquetas invoice = new clases.Eetiquetas();
    
                invoice.nombre = nombre;
                invoice.direccion = direccion;
                invoice.telefono = tel;
                invoice.Texto = "Por favor, compruebe el número de recibo, en su caso faltante dentro de 24 horas, por facor pongase en contacto con la empresa";
    
    
                reportes.frm_Report_Etiqueta frm = new reportes.frm_Report_Etiqueta();
              
            
                frm.Invoice.Add(invoice);
                frm.Titulo = "MADRID PAPEL IMPORT S.L.      918936681";
                frm.Show();

    Saludos


    ruben

    jueves, 5 de abril de 2018 13:13
  • Yo creo que necesito la variable que tiene la cantidad de hoja  entonces si yo al imprimir pongo 4 que sea 1 / 4   2/4 etc


    ruben

    jueves, 5 de abril de 2018 13:47
  • Vale, entonces el dataset del reporte no lo estas cargando con una sentencia SQL sino que lo estas alimentando por codigo. Habria que ver como alimentas ese dataset, me imagino que asignandole una coleccion de objetos de tu clase "Etiquetas".

    Si es asi, el cambio que habria que hacer es agregar en la clase etiquetas un campo adicional de tipo string, que se llame por ejemplo CantidadHoja, y ese campo rellenarlo con un bucle aplicado a la coleccion de etiquetas una vez que la tengas rellena y antes de pasarsela al informe (en el codigo que has aportado no se ve donde haces esto).

    jueves, 5 de abril de 2018 16:27
    Moderador
  • Hola Alberto

    Mira he echo lo  que me has dicho

    esta es mi clase

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    
    namespace APLICACIONMPNAV.clases
    {
        public class Eetiquetas
        {
            public string nombre { get; set; }
            public string direccion { get; set; }
            public string telefono { get; set; }
            public string Texto { get; set; }
            public string CantidadHoja { get; set; }
    
        }
    }
    
    

    Este es el boton que imprime

            private void btnimprimirbulto_Click(object sender, EventArgs e)
            {
                string cliente = this.dgvembalaje_cabecera.CurrentRow.Cells[2].Value.ToString();
                string cp = this.dgvembalaje_cabecera.CurrentRow.Cells[23].Value.ToString();
                string localidad = this.dgvembalaje_cabecera.CurrentRow.Cells[24].Value.ToString();
                string nombre = this.dgvembalaje_cabecera.CurrentRow.Cells[3].Value.ToString();
                string direccion = this.dgvembalaje_cabecera.CurrentRow.Cells[19].Value.ToString();
                string tel = this.dgvembalaje_cabecera.CurrentRow.Cells[20].Value.ToString();
    
              
                clases.Eetiquetas invoice = new clases.Eetiquetas();
    
                invoice.nombre = nombre;
                invoice.direccion = cliente + " " +  direccion + " " +localidad + " " + cp;
                invoice.telefono = tel;
                invoice.Texto = "Por favor, compruebe el número de recibo, en su caso faltante dentro de 24 horas, por facor pongase en contacto con la empresa";
    
    
                reportes.frm_Report_Etiqueta frm = new reportes.frm_Report_Etiqueta();
              
            
                frm.Invoice.Add(invoice);
                frm.Titulo = "MADRID PAPEL IMPORT S.L.      918936681";
                frm.Show();
            }

    Este es mi formulario de etiqueta donde le agregue el reporviewer

    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using Microsoft.Reporting.WinForms;
    
    
    namespace APLICACIONMPNAV.reportes
    {
        public partial class frm_Report_Etiqueta : Form
        {
            public string Titulo { get; set; }
            public List<clases.Eetiquetas> Invoice = new List<clases.Eetiquetas>();
            public frm_Report_Etiqueta()
            {
                InitializeComponent();
            }
    
            private void frm_Report_Etiqueta_Load(object sender, EventArgs e)
            {
                reportViewer1.LocalReport.DataSources.Clear();
                ReportParameter[] parameters = new ReportParameter[2];
                parameters[0] = new ReportParameter("parameterTitulo", Titulo);
                reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet2", Invoice));
    
                this.reportViewer1.RefreshReport();
            }
        }
    }
    

    Creo que no me falta nada mas ahora donde hago el bucle que dices?


    ruben

    viernes, 6 de abril de 2018 14:29
  • Alberto tu dices de hacerlo aqui el bucle

    por ejemplo dentro del campo cantidadpagina


    ruben

    viernes, 6 de abril de 2018 14:36
  • Vale, veo que en frm_Report_Etiqueta tienes la variable Invoice, que es el "List" con la coleccion de etiquetas. El contenido de esa lista es del tipo clases.Eetiquetas. Y en esa clase tienes ya la propiedad CantidadHoja. Esa es la que tenemos que inicializar con un codigo parecido a este:

    Codigo

    int i=0;
    foreach (clases.Eetiquetas etiqueta in Invoice)
    {
        etiqueta.CantidadHoja = string.Format("{0}/{1}", ++i, 1);
    }

    Esto tendria que ir antes de la linea que asigna el Invoice al ReportDataSource.

    Observa que te he puesto "1" en el numero de pagina. Si sabes cuantas etiquetas te caben en cada pagina, cambialo por (i/numEtiquetasPorPagina)+1.

    Editado: Y, como es logico, vincula el campo CantidadHoja al textbox del informa donde quieres que se presente ese valor. Tendras que agregar ese campo al DataSet del informe.
    viernes, 6 de abril de 2018 15:12
    Moderador
  • Alberto Mira 

    Donde le Digo la cantidad 

    Yo le digo aqui

    O donde le puedo decir en el código que sea la cantidad de copia así no elijo ahí

    Mira eta bien puesto mi codigo?

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using Microsoft.Reporting.WinForms;
    
    
    namespace APLICACIONMPNAV.reportes
    {
        public partial class frm_Report_Etiqueta : Form
        {
            public string Titulo { get; set; }
            public List<clases.Eetiquetas> Invoice = new List<clases.Eetiquetas>();
            public frm_Report_Etiqueta()
            {
                InitializeComponent();
            }
    
            private void frm_Report_Etiqueta_Load(object sender, EventArgs e)
            {
                reportViewer1.LocalReport.DataSources.Clear();
                ReportParameter[] parameters = new ReportParameter[2];
                parameters[0] = new ReportParameter("parameterTitulo", Titulo);
    
                int i = 0;
                foreach (clases.Eetiquetas etiqueta in Invoice)
                {
                    etiqueta.CantidadHoja = string.Format("{0}/{1}", ++i, 1);
                }
    
                reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet2", Invoice));
    
                this.reportViewer1.RefreshReport();
            }
        }
    }
    


    ruben

    viernes, 6 de abril de 2018 16:46
  • LO que me faltaria seria agregar que sume 1l 1/3  2/3   3/3

    saludos

     

    ruben

    viernes, 6 de abril de 2018 16:51
  • Alberto Esto lo hace y lo muestra pero donde hago para que salga el contador

    ruben

    viernes, 6 de abril de 2018 17:14
  • Por favor Chicos necesito solucionar esto

    saludos


    ruben

    viernes, 6 de abril de 2018 17:28
  • Soy incapaz Alberto 

    no me sale 

    Por favor ayuda chicos


    ruben

    lunes, 9 de abril de 2018 13:00
  • Tal vez sea mejor que abras un nuevo hilo, contando con algo de detalle cómo lo tienes hasta ahora y cuáles son los problemas concretos que da. Así, al ver el nuevo hilo, es más probable que se anime a contestarlo alguien que tenga mejores ideas que las mías Y también al poner en orden tus ideas y detallar cómo está estructurado el código, puede ser que quede más claro el problema para quien lo lea, y es más fácil que otro usuario te pueda dar una solución en donde yo ya me he quedado sin ideas.
    lunes, 9 de abril de 2018 17:19
    Moderador