none
Seleccionar una sola opción RRS feed

  • Pregunta

  • Hola a todos 

    Les comento que quiero realizar una aplicación, que carga datos en un datagridview y luego los exporta a un crystalreport. La idea es que el usuario final pueda tener un detalle  personalizado de los datos que desea ver. Para eso estoy utilizando dos grupos de checkbox, y 3 crystalreport.  uno de los grupos de checkbox permite seleccionar las columnas que desea ver. Al filtrar esos checkbox al datagridview lo realizo de buena manera, pero cuando quiero que ese filtro aparesca en el crystal report, el programa no considera todas las opciones y toma siempre las primeras lineas de codigo. 

    Por ejemplo tengo dos columnas: Oxigeno y CO2, y quisiera ver solo Oxigeno, el codigo funciona bien y oculta CO2 llamando al "crystalreport1", si quisiera ver solo CO2 tambien oculta la columna oxigeno llamando al "crystalreport2", pero si quiero que me muestre las dos columnas llamando al "crystalreport3" que las contiene, el programa selecciona al crystalreport1 y muestra solo la columna oxigeno por estar marcado el checkbox de oxigeno lo toma primero he ignora a CO2. Por que sucede esto? lo estoy trabajando con If es dejo el codigo. Lo que yo quisiera es que el codigo solo elija una opcion de las 3 pero que la elija cuando se cumplan todas las condiciones por favor ayuda con este problema.

    Private Sub ToolStripButton1_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton1.Click
            Dim dt As New DataTable
            dt = CType(Me.DataGridView1.DataSource, DataTable)
    
            If chbxOxi.Checked Then
                Dim cr As New CrystalReport1
                cr.SetDataSource(dt)
    
                Dim R As New Reporte
                R.crvReporte.ReportSource = cr
                R.ShowDialog()
    
            ElseIf chbxCO2.Checked Then
                Dim cr As New CrystalReport2
                cr.SetDataSource(dt)
    
                Dim R As New Reporte
                R.crvReporte.ReportSource = cr
                R.ShowDialog()
    
            ElseIf chbxOxi.Checked And chbxCO2.Checked Then
                Dim cr As New CrystalReport3
                cr.SetDataSource(dt)
    
                Dim R As New Reporte
                R.crvReporte.ReportSource = cr
                R.ShowDialog()
    
            End If 
    End sub 

    domingo, 29 de mayo de 2016 21:37

Respuestas

  • Hola adriian.91,

    Porque no usas RadioButton?, este solo te permitirá seleccionar una opción, a diferencia del CheckBox que permite varias selecciones.

    Y si no deseas cambiar, solo cambia la posición del IF-ELSE. Primero pregunta si está seleccionado los dos, y si no verifica cual de ellos fue seleccionado.

            Dim dt As New DataTable
            dt = CType(Me.DataGridView1.DataSource, DataTable)
    
            Dim reporte As New ReportDocument
    
            If chbxOxi.Checked And chbxCO2.Checked Then
                reporte = New CrystalReport3
            ElseIf chbxCO2.Checked Then
                reporte = New CrystalReport1
            Else
                reporte = New CrystalReport2
            End If
    
            Dim R As New Reporte
            R.crvReporte.ReportSource = reporte
            R.ShowDialog()

    Solo agregarías el :

    Imports CrystalDecisions.CrystalReports.Engine

    Para que puedas usar el ReportDocument.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta adriian.91 domingo, 29 de mayo de 2016 23:30
    domingo, 29 de mayo de 2016 22:08
  • adriian.91,

    Es lógico, la primera expresión se cumple por tanto el flujo ingresa al bloque de código subyacente, lo que debes de hacer es validar por ambas condiciones tal y como lo haces en el caso 3:

    If chbxOxi.Checked And chbxCO2.Checked = False Then
                Dim cr As New CrystalReport1
                cr.SetDataSource(dt)
    
                Dim R As New Reporte
                R.crvReporte.ReportSource = cr
                R.ShowDialog()
    
            ElseIf chbxCO2.Checked And chbxOxi.Checked = False Then
                Dim cr As New CrystalReport2
                cr.SetDataSource(dt)
    
                Dim R As New Reporte
                R.crvReporte.ReportSource = cr
                R.ShowDialog()
    
            ElseIf chbxOxi.Checked And chbxCO2.Checked Then
                Dim cr As New CrystalReport3
                cr.SetDataSource(dt)
    
                Dim R As New Reporte
                R.crvReporte.ReportSource = cr
                R.ShowDialog()
    
            End If 



    • Marcado como respuesta adriian.91 domingo, 29 de mayo de 2016 23:32
    domingo, 29 de mayo de 2016 22:09

Todas las respuestas

  • Hola adriian.91,

    Porque no usas RadioButton?, este solo te permitirá seleccionar una opción, a diferencia del CheckBox que permite varias selecciones.

    Y si no deseas cambiar, solo cambia la posición del IF-ELSE. Primero pregunta si está seleccionado los dos, y si no verifica cual de ellos fue seleccionado.

            Dim dt As New DataTable
            dt = CType(Me.DataGridView1.DataSource, DataTable)
    
            Dim reporte As New ReportDocument
    
            If chbxOxi.Checked And chbxCO2.Checked Then
                reporte = New CrystalReport3
            ElseIf chbxCO2.Checked Then
                reporte = New CrystalReport1
            Else
                reporte = New CrystalReport2
            End If
    
            Dim R As New Reporte
            R.crvReporte.ReportSource = reporte
            R.ShowDialog()

    Solo agregarías el :

    Imports CrystalDecisions.CrystalReports.Engine

    Para que puedas usar el ReportDocument.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta adriian.91 domingo, 29 de mayo de 2016 23:30
    domingo, 29 de mayo de 2016 22:08
  • adriian.91,

    Es lógico, la primera expresión se cumple por tanto el flujo ingresa al bloque de código subyacente, lo que debes de hacer es validar por ambas condiciones tal y como lo haces en el caso 3:

    If chbxOxi.Checked And chbxCO2.Checked = False Then
                Dim cr As New CrystalReport1
                cr.SetDataSource(dt)
    
                Dim R As New Reporte
                R.crvReporte.ReportSource = cr
                R.ShowDialog()
    
            ElseIf chbxCO2.Checked And chbxOxi.Checked = False Then
                Dim cr As New CrystalReport2
                cr.SetDataSource(dt)
    
                Dim R As New Reporte
                R.crvReporte.ReportSource = cr
                R.ShowDialog()
    
            ElseIf chbxOxi.Checked And chbxCO2.Checked Then
                Dim cr As New CrystalReport3
                cr.SetDataSource(dt)
    
                Dim R As New Reporte
                R.crvReporte.ReportSource = cr
                R.ShowDialog()
    
            End If 



    • Marcado como respuesta adriian.91 domingo, 29 de mayo de 2016 23:32
    domingo, 29 de mayo de 2016 22:09
  • Muchas gracias a los dos ambas respuesta me sirvieron saludos 
    domingo, 29 de mayo de 2016 23:31