populating Crystal Reports from DataGrid data

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Brock

    populating Crystal Reports from DataGrid data

    I am trying to populate a Crystal Report from data in my DataGrid. The
    reason for this is that I want the user to be able to change values
    without updating the database, but still have their report reflect the
    values they anticipate committing to see hypothetical totals of
    columns from a set of records. These records are displaying properly
    on my DataGrid but I'm not sure how to get Crystal Reports 10 to use
    as its datasource the dataset in memory that could be had directly
    from the datagrid.

    I'm guessing I need to Dim a new DataSet, populate it from the
    datagrid, and set the new dataset as the datasource for CR. But how?

    How can I specify that the Datagrid's DataSource property can be
    explicitly cast as a DataSet object that CR can pick up. And how in CR
    do I tell it that this resultingDataSe t is what it needs for the
    report?

    I found a snippet of code that may work as PART of the solution, but I
    need a little direction.
    Private Sub FillDataSet(ByV al DataFromGrid As DataSet)
    DataFromGrid = CType(dgEmploye es.DataSource, DataSet)
    End Sub

  • sloan

    #2
    Re: populating Crystal Reports from DataGrid data

    I already responded to this post last week.

    ...

    Did you attempt my advice?






    "Brock" <wade.brock@yah oo.comwrote in message
    news:6187b937-174f-47a2-8569-415ae22eb0e6@r6 6g2000hsg.googl egroups.com...
    >I am trying to populate a Crystal Report from data in my DataGrid. The
    reason for this is that I want the user to be able to change values
    without updating the database, but still have their report reflect the
    values they anticipate committing to see hypothetical totals of
    columns from a set of records. These records are displaying properly
    on my DataGrid but I'm not sure how to get Crystal Reports 10 to use
    as its datasource the dataset in memory that could be had directly
    from the datagrid.
    >
    I'm guessing I need to Dim a new DataSet, populate it from the
    datagrid, and set the new dataset as the datasource for CR. But how?
    >
    How can I specify that the Datagrid's DataSource property can be
    explicitly cast as a DataSet object that CR can pick up. And how in CR
    do I tell it that this resultingDataSe t is what it needs for the
    report?
    >
    I found a snippet of code that may work as PART of the solution, but I
    need a little direction.
    Private Sub FillDataSet(ByV al DataFromGrid As DataSet)
    DataFromGrid = CType(dgEmploye es.DataSource, DataSet)
    End Sub
    >

    Comment

    • Brock

      #3
      Re: populating Crystal Reports from DataGrid data

      I tried to adapt your method, well I should say I got totally lost in
      the process. Back to your reply, ad I do appreciate the help:

      "I would go with the PUSH method of CR (crystal report) development.
      And instead of worrying about the datagrid as the SOURCE, cache
      (session?)
      the dataset (or datatable possibly) and use it as the source for the
      datagrid AND then the report."

      I went into my report to use the CR DatabaseExpert and stumbled when
      trying to decide what to put in for my datasource. My datasource for
      the datagrid itself gets populated with this code:

      Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
      System.EventArg s) Handles MyBase.Load
      'Put user code to initialize the page here
      'lblWelcome.Tex t = "Hello " & Global.UserSecu rity.Fname.Trim &
      " " & Global.UserSecu rity.Lname
      Dim act As Action
      Dim pos As Position
      Dim empname As String
      Dim lvi As ListItem
      Dim Employee As Employee
      Dim empcount As Integer
      act = (New
      ActionBroker).G etActionCurrent (Global.UserSec urity.EmpId, Today,
      Global.UserName , Global.UserPass word, Global.appDataS ource)
      pos = (New PositionBroker) .GetPosition(ac t.PositionID,
      Global.UserName , Global.UserPass word, Global.appDataS ource)
      m_department = pos.Department. Name
      Dim emps As Employees = (New
      EmployeeBroker) .GetCurrentEmpl oyeesByDepartme nt(m_department ,
      Global.UserName , Global.UserPass word, Global.appDataS ource)
      Dim dt As New DataTable
      Dim count As Integer = 0
      For Each emp As Employee In emps
      SetListViewItem (emp, dt, count)
      count = count + 1
      Next
      dgEmployees.Dat aSource = dt
      dgEmployees.Dat aBind()
      End Sub
      Private Sub SetListViewItem (ByVal dr As Employee, ByVal dt As
      DataTable, ByVal count As Integer)
      If count = 0 Then
      dt.Columns.Add( "Emp #")
      dt.Columns.Add( "Last Name")
      dt.Columns.Add( "First Name")
      dt.Columns.Add( "Title")
      End If
      Dim EmpPos As Action = (New
      ActionBroker).G etActionCurrent (dr.Key, Today, Global.UserName ,
      Global.UserPass word, Global.appDataS ource)
      Dim employee As DataRow = dt.NewRow
      employee("Emp #") = dr.Key
      employee("Last Name") = dr.LastName

      employee("First Name") = dr.FirstName
      employee("Title ") = EmpPos.WorkAgai nstInfo.Title
      dt.Rows.Add(emp loyee)
      End Sub 'SetListViewIte m

      The immediate challenge is that the datasource I was given by the
      powers that be was a precompiled DLL with stored procedures and
      database connections made to an Oracle database. So I didn't know the
      foggiest idea of how the above code could be adapted/used to provide
      CR with its data needs. I thought it might be in this specific case
      more manageable for this newbie to find a way of using the datagrid as
      the CR source (not that I know how to approach that either). But I can
      see the challenges with caching and viewstate in a more complex page
      than what I'm doing.

      So any clues would be great... thanks! Brockus


      On Jul 21, 12:54 pm, "sloan" <sl...@ipass.ne twrote:
      I already responded to this post last week.
      >
      ..
      >
      Did you attempt my advice?
      >
      "Brock" <wade.br...@yah oo.comwrote in message
      >
      news:6187b937-174f-47a2-8569-415ae22eb0e6@r6 6g2000hsg.googl egroups.com...
      >
      >
      >
      I am trying to populate a Crystal Report from data in my DataGrid. The
      reason for this is that I want the user to be able to change values
      without updating the database, but still have their report reflect the
      values they anticipate committing to see hypothetical totals of
      columns from a set of records. These records are displaying properly
      on my DataGrid but I'm not sure how to get Crystal Reports 10 to use
      as its datasource the dataset in memory that could be had directly
      from the datagrid.
      >
      I'm guessing I need to Dim a new DataSet, populate it from the
      datagrid, and set the new dataset as the datasource for CR. But how?
      >
      How can I specify that the Datagrid's DataSource property can be
      explicitly cast as a DataSet object that CR can pick up. And how in CR
      do I tell it that this resultingDataSe t is what it needs for the
      report?
      >
      I found a snippet of code that may work as PART of the solution, but I
      need a little direction.
         Private Sub FillDataSet(ByV al DataFromGrid As DataSet)
             DataFromGrid = CType(dgEmploye es.DataSource, DataSet)
         End Sub- Hide quoted text -
      >
      - Show quoted text -

      Comment

      • sloan

        #4
        Re: populating Crystal Reports from DataGrid data



        Ok, since you're in a web world...you gotta keep some stuff straight.

        Your attempt to "re-get" the DataSource ~from~ the DataGrid after the page
        is rendered is not a good strategy.


        You also need to remember that once a page displays, alot of things you had
        in the code behind are not there anymore, unless you specifically save them
        somewhere.
        (Like the Session as the usual suspect).


        So I will outline something that I think is the correct approach.


        On the page_load...... ..
        Populate your source data (dataset) however you normally do this. I
        will call this the model from now on.
        Put the model in the Session object using a unique keyname.
        Bind the model to the DataGrid you have on the page already.

        You now have two things:
        1. The original data inside the Session object.
        2. A ~display~ of the original data on the user's browser.

        The user makes changes.

        Now you need to COLLECT the information the user changed by iterating
        over all the rows in the datagrid, and pulling out the values.
        Tip: Use a hidden object for those pieces of information you don't
        want to display, but want to keep around.
        Put this data into a new dataset (a new "model").
        You can throw this into the Session object as well (if you want to) with
        a DIFFERENT key name.

        Optional:
        Use the model(1) and the model(2) and create a massaged version of
        the data.

        Take the new model , and use the PUSH method to populate the Crystal
        Report.



        PS
        You should be able to bind the datagrid aganst this object
        Dim emps As Employees
        without artificially converting it to a dataset/datatable. Have you tried
        this yet?




        "Brock" <wade.brock@yah oo.comwrote in message
        news:8429053c-2fcf-4536-b0ad-0941cf592ef4@m7 3g2000hsh.googl egroups.com...
        I tried to adapt your method, well I should say I got totally lost in
        the process. Back to your reply, ad I do appreciate the help:

        "I would go with the PUSH method of CR (crystal report) development.
        And instead of worrying about the datagrid as the SOURCE, cache
        (session?)
        the dataset (or datatable possibly) and use it as the source for the
        datagrid AND then the report."

        I went into my report to use the CR DatabaseExpert and stumbled when
        trying to decide what to put in for my datasource. My datasource for
        the datagrid itself gets populated with this code:

        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
        System.EventArg s) Handles MyBase.Load
        'Put user code to initialize the page here
        'lblWelcome.Tex t = "Hello " & Global.UserSecu rity.Fname.Trim &
        " " & Global.UserSecu rity.Lname
        Dim act As Action
        Dim pos As Position
        Dim empname As String
        Dim lvi As ListItem
        Dim Employee As Employee
        Dim empcount As Integer
        act = (New
        ActionBroker).G etActionCurrent (Global.UserSec urity.EmpId, Today,
        Global.UserName , Global.UserPass word, Global.appDataS ource)
        pos = (New PositionBroker) .GetPosition(ac t.PositionID,
        Global.UserName , Global.UserPass word, Global.appDataS ource)
        m_department = pos.Department. Name
        Dim emps As Employees = (New
        EmployeeBroker) .GetCurrentEmpl oyeesByDepartme nt(m_department ,
        Global.UserName , Global.UserPass word, Global.appDataS ource)
        Dim dt As New DataTable
        Dim count As Integer = 0
        For Each emp As Employee In emps
        SetListViewItem (emp, dt, count)
        count = count + 1
        Next
        dgEmployees.Dat aSource = dt
        dgEmployees.Dat aBind()
        End Sub
        Private Sub SetListViewItem (ByVal dr As Employee, ByVal dt As
        DataTable, ByVal count As Integer)
        If count = 0 Then
        dt.Columns.Add( "Emp #")
        dt.Columns.Add( "Last Name")
        dt.Columns.Add( "First Name")
        dt.Columns.Add( "Title")
        End If
        Dim EmpPos As Action = (New
        ActionBroker).G etActionCurrent (dr.Key, Today, Global.UserName ,
        Global.UserPass word, Global.appDataS ource)
        Dim employee As DataRow = dt.NewRow
        employee("Emp #") = dr.Key
        employee("Last Name") = dr.LastName

        employee("First Name") = dr.FirstName
        employee("Title ") = EmpPos.WorkAgai nstInfo.Title
        dt.Rows.Add(emp loyee)
        End Sub 'SetListViewIte m

        The immediate challenge is that the datasource I was given by the
        powers that be was a precompiled DLL with stored procedures and
        database connections made to an Oracle database. So I didn't know the
        foggiest idea of how the above code could be adapted/used to provide
        CR with its data needs. I thought it might be in this specific case
        more manageable for this newbie to find a way of using the datagrid as
        the CR source (not that I know how to approach that either). But I can
        see the challenges with caching and viewstate in a more complex page
        than what I'm doing.

        So any clues would be great... thanks! Brockus


        On Jul 21, 12:54 pm, "sloan" <sl...@ipass.ne twrote:
        I already responded to this post last week.
        >
        ..
        >
        Did you attempt my advice?
        >
        "Brock" <wade.br...@yah oo.comwrote in message
        >
        news:6187b937-174f-47a2-8569-415ae22eb0e6@r6 6g2000hsg.googl egroups.com...
        >
        >
        >
        I am trying to populate a Crystal Report from data in my DataGrid. The
        reason for this is that I want the user to be able to change values
        without updating the database, but still have their report reflect the
        values they anticipate committing to see hypothetical totals of
        columns from a set of records. These records are displaying properly
        on my DataGrid but I'm not sure how to get Crystal Reports 10 to use
        as its datasource the dataset in memory that could be had directly
        from the datagrid.
        >
        I'm guessing I need to Dim a new DataSet, populate it from the
        datagrid, and set the new dataset as the datasource for CR. But how?
        >
        How can I specify that the Datagrid's DataSource property can be
        explicitly cast as a DataSet object that CR can pick up. And how in CR
        do I tell it that this resultingDataSe t is what it needs for the
        report?
        >
        I found a snippet of code that may work as PART of the solution, but I
        need a little direction.
        Private Sub FillDataSet(ByV al DataFromGrid As DataSet)
        DataFromGrid = CType(dgEmploye es.DataSource, DataSet)
        End Sub- Hide quoted text -
        >
        - Show quoted text -

        Comment

        • Brock

          #5
          Re: populating Crystal Reports from DataGrid data

          My apologies, but I'm a real newbie on several key issues. One is how
          to access the "Session" and again how to specify in CR itself what its
          datasource is.

          On Jul 21, 3:11 pm, "sloan" <sl...@ipass.ne twrote:
          Ok, since you're in a web world...you gotta keep some stuff straight.
          >
          Your attempt to "re-get" the DataSource ~from~ the DataGrid after the page
          is rendered is not a good strategy.
          >
          You also need to remember that once a page displays, alot of things you had
          in the code behind are not there anymore, unless you specifically save them
          somewhere.
          (Like the Session as the usual suspect).
          >
          So I will outline something that I think is the correct approach.
          >
          On the page_load...... ..
              Populate your source data (dataset) however you normally do this. I
          will call this the model from now on.
              Put the model in the Session object using a unique keyname.
              Bind the model to the DataGrid you have on the page already.
          >
             You now have two things:
                  1.  The original data inside the Session object.
                  2.  A ~display~ of the original data on the user's browser.
          >
              The user makes changes.
          >
              Now you need to COLLECT the information the user changed by iterating
          over all the rows in the datagrid, and pulling out the values.
                  Tip:  Use a hidden object for those pieces of information you don't
          want to display, but want to keep around.
              Put this data into a new dataset (a new "model").
              You can throw this into the Session object as well (if you want to) with
          a DIFFERENT key name.
          >
              Optional:
                    Use the model(1) and the model(2) and create a massaged version of
          the data.
          >
              Take the new model , and use the PUSH method to populate the Crystal
          Report.
          >
          PS
          You should be able to bind the datagrid aganst this object
             Dim emps As Employees
          without artificially converting it to a dataset/datatable.  Have you tried
          this yet?
          >
          "Brock" <wade.br...@yah oo.comwrote in message
          >
          news:8429053c-2fcf-4536-b0ad-0941cf592ef4@m7 3g2000hsh.googl egroups.com...
          I tried to adapt your method, well I should say I got totally lost in
          the process. Back to your reply, ad I do appreciate the help:
          >
          "I would go with the PUSH method of CR (crystal report) development.
          And instead of worrying about the datagrid as the SOURCE, cache
          (session?)
          the dataset (or datatable possibly) and use it as the source for the
          datagrid AND then the report."
          >
          I went into my report to use the CR DatabaseExpert and stumbled when
          trying to decide what to put in for my datasource. My datasource for
          the datagrid itself gets populated with this code:
          >
              Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
          System.EventArg s) Handles MyBase.Load
                  'Put user code to initialize the page here
                  'lblWelcome.Tex t = "Hello " & Global.UserSecu rity.Fname..Tri m &
          " " & Global.UserSecu rity.Lname
                  Dim act As Action
                  Dim pos As Position
                  Dim empname As String
                  Dim lvi As ListItem
                  Dim Employee As Employee
                  Dim empcount As Integer
                  act = (New
          ActionBroker).G etActionCurrent (Global.UserSec urity.EmpId, Today,
          Global.UserName , Global.UserPass word, Global.appDataS ource)
                  pos = (New PositionBroker) .GetPosition(ac t.PositionID,
          Global.UserName , Global.UserPass word, Global.appDataS ource)
                  m_department = pos.Department. Name
                  Dim emps As Employees = (New
          EmployeeBroker) .GetCurrentEmpl oyeesByDepartme nt(m_department ,
          Global.UserName , Global.UserPass word, Global.appDataS ource)
                  Dim dt As New DataTable
                  Dim count As Integer = 0
                  For Each emp As Employee In emps
                      SetListViewItem (emp, dt, count)
                      count = count + 1
                  Next
                  dgEmployees.Dat aSource = dt
                  dgEmployees.Dat aBind()
              End Sub
              Private Sub SetListViewItem (ByVal dr As Employee, ByVal dt As
          DataTable, ByVal count As Integer)
                  If count = 0 Then
                      dt.Columns.Add( "Emp #")
                      dt.Columns.Add( "Last Name")
                      dt.Columns.Add( "First Name")
                      dt.Columns.Add( "Title")
                  End If
                  Dim EmpPos As Action = (New
          ActionBroker).G etActionCurrent (dr.Key, Today, Global.UserName ,
          Global.UserPass word, Global.appDataS ource)
                  Dim employee As DataRow = dt.NewRow
                  employee("Emp #") = dr.Key
                  employee("Last Name") = dr.LastName
          >
                  employee("First Name") = dr.FirstName
                  employee("Title ") = EmpPos.WorkAgai nstInfo.Title
                  dt.Rows.Add(emp loyee)
              End Sub 'SetListViewIte m
          >
          The immediate challenge is that the datasource I was given by the
          powers that be was a precompiled DLL with stored procedures and
          database connections made to an Oracle database. So I didn't know the
          foggiest idea of how the above code could be adapted/used to provide
          CR with its data needs. I thought it might be in this specific case
          more manageable for this newbie to find a way of using the datagrid as
          the CR source (not that I know how to approach that either). But I can
          see the challenges with caching and viewstate in a more complex page
          than what I'm doing.
          >
          So any clues would be great... thanks!     Brockus
          >
          On Jul 21, 12:54 pm, "sloan" <sl...@ipass.ne twrote:
          >
          >
          >
          I already responded to this post last week.
          >
          ..
          >
          Did you attempt my advice?
          >
          "Brock" <wade.br...@yah oo.comwrote in message
          >
          news:6187b937-174f-47a2-8569-415ae22eb0e6@r6 6g2000hsg.googl egroups.com....
          >
          >I am trying to populate a Crystal Report from data in my DataGrid. The
          reason for this is that I want the user to be able to change values
          without updating the database, but still have their report reflect the
          values they anticipate committing to see hypothetical totals of
          columns from a set of records. These records are displaying properly
          on my DataGrid but I'm not sure how to get Crystal Reports 10 to use
          as its datasource the dataset in memory that could be had directly
          from the datagrid.
          >
          I'm guessing I need to Dim a new DataSet, populate it from the
          datagrid, and set the new dataset as the datasource for CR. But how?
          >
          How can I specify that the Datagrid's DataSource property can be
          explicitly cast as a DataSet object that CR can pick up. And how in CR
          do I tell it that this resultingDataSe t is what it needs for the
          report?
          >
          I found a snippet of code that may work as PART of the solution, but I
          need a little direction.
          Private Sub FillDataSet(ByV al DataFromGrid As DataSet)
          DataFromGrid = CType(dgEmploye es.DataSource, DataSet)
          End Sub- Hide quoted text -
          >
          - Show quoted text -- Hide quoted text -
          >
          - Show quoted text -

          Comment

          • sloan

            #6
            Re: populating Crystal Reports from DataGrid data


            Session:
            Founded in 1999, ASPFree.com offers free gift cards, game redeem codes, and daily giveaways with no fees or hidden charges. Get your favorite freebies and surprises every day.


            Session belongs to Asp.Net, not CR.

            ...........

            This is where you can store an object for later retrieval ( after a page
            displays ).




            "Brock" <wade.brock@yah oo.comwrote in message
            news:fbf79205-93b8-4013-b4be-e15196b9c1bf@c5 8g2000hsc.googl egroups.com...
            My apologies, but I'm a real newbie on several key issues. One is how
            to access the "Session" and again how to specify in CR itself what its
            datasource is.

            On Jul 21, 3:11 pm, "sloan" <sl...@ipass.ne twrote:
            Ok, since you're in a web world...you gotta keep some stuff straight.
            >
            Your attempt to "re-get" the DataSource ~from~ the DataGrid after the page
            is rendered is not a good strategy.
            >
            You also need to remember that once a page displays, alot of things you
            had
            in the code behind are not there anymore, unless you specifically save
            them
            somewhere.
            (Like the Session as the usual suspect).
            >
            So I will outline something that I think is the correct approach.
            >
            On the page_load...... ..
            Populate your source data (dataset) however you normally do this. I
            will call this the model from now on.
            Put the model in the Session object using a unique keyname.
            Bind the model to the DataGrid you have on the page already.
            >
            You now have two things:
            1. The original data inside the Session object.
            2. A ~display~ of the original data on the user's browser.
            >
            The user makes changes.
            >
            Now you need to COLLECT the information the user changed by iterating
            over all the rows in the datagrid, and pulling out the values.
            Tip: Use a hidden object for those pieces of information you don't
            want to display, but want to keep around.
            Put this data into a new dataset (a new "model").
            You can throw this into the Session object as well (if you want to) with
            a DIFFERENT key name.
            >
            Optional:
            Use the model(1) and the model(2) and create a massaged version of
            the data.
            >
            Take the new model , and use the PUSH method to populate the Crystal
            Report.
            >
            PS
            You should be able to bind the datagrid aganst this object
            Dim emps As Employees
            without artificially converting it to a dataset/datatable. Have you tried
            this yet?
            >
            "Brock" <wade.br...@yah oo.comwrote in message
            >
            news:8429053c-2fcf-4536-b0ad-0941cf592ef4@m7 3g2000hsh.googl egroups.com...
            I tried to adapt your method, well I should say I got totally lost in
            the process. Back to your reply, ad I do appreciate the help:
            >
            "I would go with the PUSH method of CR (crystal report) development.
            And instead of worrying about the datagrid as the SOURCE, cache
            (session?)
            the dataset (or datatable possibly) and use it as the source for the
            datagrid AND then the report."
            >
            I went into my report to use the CR DatabaseExpert and stumbled when
            trying to decide what to put in for my datasource. My datasource for
            the datagrid itself gets populated with this code:
            >
            Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
            System.EventArg s) Handles MyBase.Load
            'Put user code to initialize the page here
            'lblWelcome.Tex t = "Hello " & Global.UserSecu rity.Fname.Trim &
            " " & Global.UserSecu rity.Lname
            Dim act As Action
            Dim pos As Position
            Dim empname As String
            Dim lvi As ListItem
            Dim Employee As Employee
            Dim empcount As Integer
            act = (New
            ActionBroker).G etActionCurrent (Global.UserSec urity.EmpId, Today,
            Global.UserName , Global.UserPass word, Global.appDataS ource)
            pos = (New PositionBroker) .GetPosition(ac t.PositionID,
            Global.UserName , Global.UserPass word, Global.appDataS ource)
            m_department = pos.Department. Name
            Dim emps As Employees = (New
            EmployeeBroker) .GetCurrentEmpl oyeesByDepartme nt(m_department ,
            Global.UserName , Global.UserPass word, Global.appDataS ource)
            Dim dt As New DataTable
            Dim count As Integer = 0
            For Each emp As Employee In emps
            SetListViewItem (emp, dt, count)
            count = count + 1
            Next
            dgEmployees.Dat aSource = dt
            dgEmployees.Dat aBind()
            End Sub
            Private Sub SetListViewItem (ByVal dr As Employee, ByVal dt As
            DataTable, ByVal count As Integer)
            If count = 0 Then
            dt.Columns.Add( "Emp #")
            dt.Columns.Add( "Last Name")
            dt.Columns.Add( "First Name")
            dt.Columns.Add( "Title")
            End If
            Dim EmpPos As Action = (New
            ActionBroker).G etActionCurrent (dr.Key, Today, Global.UserName ,
            Global.UserPass word, Global.appDataS ource)
            Dim employee As DataRow = dt.NewRow
            employee("Emp #") = dr.Key
            employee("Last Name") = dr.LastName
            >
            employee("First Name") = dr.FirstName
            employee("Title ") = EmpPos.WorkAgai nstInfo.Title
            dt.Rows.Add(emp loyee)
            End Sub 'SetListViewIte m
            >
            The immediate challenge is that the datasource I was given by the
            powers that be was a precompiled DLL with stored procedures and
            database connections made to an Oracle database. So I didn't know the
            foggiest idea of how the above code could be adapted/used to provide
            CR with its data needs. I thought it might be in this specific case
            more manageable for this newbie to find a way of using the datagrid as
            the CR source (not that I know how to approach that either). But I can
            see the challenges with caching and viewstate in a more complex page
            than what I'm doing.
            >
            So any clues would be great... thanks! Brockus
            >
            On Jul 21, 12:54 pm, "sloan" <sl...@ipass.ne twrote:
            >
            >
            >
            I already responded to this post last week.
            >
            ..
            >
            Did you attempt my advice?
            >
            "Brock" <wade.br...@yah oo.comwrote in message
            >
            news:6187b937-174f-47a2-8569-415ae22eb0e6@r6 6g2000hsg.googl egroups.com...
            >
            >I am trying to populate a Crystal Report from data in my DataGrid. The
            reason for this is that I want the user to be able to change values
            without updating the database, but still have their report reflect the
            values they anticipate committing to see hypothetical totals of
            columns from a set of records. These records are displaying properly
            on my DataGrid but I'm not sure how to get Crystal Reports 10 to use
            as its datasource the dataset in memory that could be had directly
            from the datagrid.
            >
            I'm guessing I need to Dim a new DataSet, populate it from the
            datagrid, and set the new dataset as the datasource for CR. But how?
            >
            How can I specify that the Datagrid's DataSource property can be
            explicitly cast as a DataSet object that CR can pick up. And how in CR
            do I tell it that this resultingDataSe t is what it needs for the
            report?
            >
            I found a snippet of code that may work as PART of the solution, but I
            need a little direction.
            Private Sub FillDataSet(ByV al DataFromGrid As DataSet)
            DataFromGrid = CType(dgEmploye es.DataSource, DataSet)
            End Sub- Hide quoted text -
            >
            - Show quoted text -- Hide quoted text -
            >
            - Show quoted text -

            Comment

            • Brock

              #7
              Re: populating Crystal Reports from DataGrid data

              Hi Sloan... another poster on 'microsoft.publ ic.dotnet.langu ages.vb'
              suggested using something like:

              MyCrystalReport .SetDataSource( MyDataGrid.Data Source)

              - to set the CR datasource... I'm guessing placing that in my code-
              behind .aspx.vb (?) - maybe in the event handler for a button that
              displays the reportViewer?
              If that's the case would I go into the CR Datasource wizard and spell-
              out something to let CR know this is where to look? My CR I'm writing
              resides as an object in the actual project, but I don't know how much
              CR recognizes datasources and how explicit the location needs to
              read... thanks! Brockus


              On Jul 21, 4:43 pm, "sloan" <sl...@ipass.ne twrote:
              Session:http://www.aspfree.com/c/a/ASP.NET/A...ion-Objects-in...
              >
              Session belongs to Asp.Net, not CR.
              >
              ..........
              >
              This is where you can store an object for later retrieval ( after a page
              displays ).
              >
              "Brock" <wade.br...@yah oo.comwrote in message
              >
              news:fbf79205-93b8-4013-b4be-e15196b9c1bf@c5 8g2000hsc.googl egroups.com...
              My apologies, but I'm a real newbie on several key issues. One is how
              to access the "Session" and again how to specify in CR itself what its
              datasource is.
              >
              On Jul 21, 3:11 pm, "sloan" <sl...@ipass.ne twrote:
              >
              >
              >
              Ok, since you're in a web world...you gotta keep some stuff straight.
              >
              Your attempt to "re-get" the DataSource ~from~ the DataGrid after the page
              is rendered is not a good strategy.
              >
              You also need to remember that once a page displays, alot of things you
              had
              in the code behind are not there anymore, unless you specifically save
              them
              somewhere.
              (Like the Session as the usual suspect).
              >
              So I will outline something that I think is the correct approach.
              >
              On the page_load...... ..
              Populate your source data (dataset) however you normally do this. I
              will call this the model from now on.
              Put the model in the Session object using a unique keyname.
              Bind the model to the DataGrid you have on the page already.
              >
              You now have two things:
              1. The original data inside the Session object.
              2. A ~display~ of the original data on the user's browser.
              >
              The user makes changes.
              >
              Now you need to COLLECT the information the user changed by iterating
              over all the rows in the datagrid, and pulling out the values.
              Tip: Use a hidden object for those pieces of information you don't
              want to display, but want to keep around.
              Put this data into a new dataset (a new "model").
              You can throw this into the Session object as well (if you want to) with
              a DIFFERENT key name.
              >
              Optional:
              Use the model(1) and the model(2) and create a massaged version of
              the data.
              >
              Take the new model , and use the PUSH method to populate the Crystal
              Report.
              >
              PS
              You should be able to bind the datagrid aganst this object
              Dim emps As Employees
              without artificially converting it to a dataset/datatable. Have you tried
              this yet?
              >
              "Brock" <wade.br...@yah oo.comwrote in message
              >
              news:8429053c-2fcf-4536-b0ad-0941cf592ef4@m7 3g2000hsh.googl egroups.com....
              I tried to adapt your method, well I should say I got totally lost in
              the process. Back to your reply, ad I do appreciate the help:
              >
              "I would go with the PUSH method of CR (crystal report) development.
              And instead of worrying about the datagrid as the SOURCE, cache
              (session?)
              the dataset (or datatable possibly) and use it as the source for the
              datagrid AND then the report."
              >
              I went into my report to use the CR DatabaseExpert and stumbled when
              trying to decide what to put in for my datasource. My datasource for
              the datagrid itself gets populated with this code:
              >
              Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
              System.EventArg s) Handles MyBase.Load
              'Put user code to initialize the page here
              'lblWelcome.Tex t = "Hello " & Global.UserSecu rity.Fname.Trim &
              " " & Global.UserSecu rity.Lname
              Dim act As Action
              Dim pos As Position
              Dim empname As String
              Dim lvi As ListItem
              Dim Employee As Employee
              Dim empcount As Integer
              act = (New
              ActionBroker).G etActionCurrent (Global.UserSec urity.EmpId, Today,
              Global.UserName , Global.UserPass word, Global.appDataS ource)
              pos = (New PositionBroker) .GetPosition(ac t.PositionID,
              Global.UserName , Global.UserPass word, Global.appDataS ource)
              m_department = pos.Department. Name
              Dim emps As Employees = (New
              EmployeeBroker) .GetCurrentEmpl oyeesByDepartme nt(m_department ,
              Global.UserName , Global.UserPass word, Global.appDataS ource)
              Dim dt As New DataTable
              Dim count As Integer = 0
              For Each emp As Employee In emps
              SetListViewItem (emp, dt, count)
              count = count + 1
              Next
              dgEmployees.Dat aSource = dt
              dgEmployees.Dat aBind()
              End Sub
              Private Sub SetListViewItem (ByVal dr As Employee, ByVal dt As
              DataTable, ByVal count As Integer)
              If count = 0 Then
              dt.Columns.Add( "Emp #")
              dt.Columns.Add( "Last Name")
              dt.Columns.Add( "First Name")
              dt.Columns.Add( "Title")
              End If
              Dim EmpPos As Action = (New
              ActionBroker).G etActionCurrent (dr.Key, Today, Global.UserName ,
              Global.UserPass word, Global.appDataS ource)
              Dim employee As DataRow = dt.NewRow
              employee("Emp #") = dr.Key
              employee("Last Name") = dr.LastName
              >
              employee("First Name") = dr.FirstName
              employee("Title ") = EmpPos.WorkAgai nstInfo.Title
              dt.Rows.Add(emp loyee)
              End Sub 'SetListViewIte m
              >
              The immediate challenge is that the datasource I was given by the
              powers that be was a precompiled DLL with stored procedures and
              database connections made to an Oracle database. So I didn't know the
              foggiest idea of how the above code could be adapted/used to provide
              CR with its data needs. I thought it might be in this specific case
              more manageable for this newbie to find a way of using the datagrid as
              the CR source (not that I know how to approach that either). But I can
              see the challenges with caching and viewstate in a more complex page
              than what I'm doing.
              >
              So any clues would be great... thanks! Brockus
              >
              On Jul 21, 12:54 pm, "sloan" <sl...@ipass.ne twrote:
              >
              I already responded to this post last week.
              >
              ..
              >
              Did you attempt my advice?
              >
              "Brock" <wade.br...@yah oo.comwrote in message
              >
              >news:6187b93 7-174f-47a2-8569-415ae22eb0e6@r6 6g2000hsg.googl egroups.com....
              >
              I am trying to populate a Crystal Report from data in my DataGrid. The
              reason for this is that I want the user to be able to change values
              without updating the database, but still have their report reflect the
              values they anticipate committing to see hypothetical totals of
              columns from a set of records. These records are displaying properly
              on my DataGrid but I'm not sure how to get Crystal Reports 10 to use
              as its datasource the dataset in memory that could be had directly
              from the datagrid.
              >
              I'm guessing I need to Dim a new DataSet, populate it from the
              datagrid, and set the new dataset as the datasource for CR. But how?
              >
              How can I specify that the Datagrid's DataSource property can be
              explicitly cast as a DataSet object that CR can pick up. And how inCR
              do I tell it that this resultingDataSe t is what it needs for the
              report?
              >
              I found a snippet of code that may work as PART of the solution, but I
              need a little direction.
              Private Sub FillDataSet(ByV al DataFromGrid As DataSet)
              DataFromGrid = CType(dgEmploye es.DataSource, DataSet)
              End Sub- Hide quoted text -
              >
              - Show quoted text -- Hide quoted text -
              >
              - Show quoted text -- Hide quoted text -
              >
              - Show quoted text -

              Comment

              • sloan

                #8
                Re: populating Crystal Reports from DataGrid data


                I know he drilled you about it already....but I'll throw another reminder

                "another poster on 'microsoft.publ ic.dotnet.langu ages.vb'
                suggested using something like:"

                That's why multi posting stinks, because you get disjoint conversations
                going.
                So we'll let this ~one~ slide.

                ...

                You'll have to experiment with the syntax he gave you.

                ...

                However. You need to list out what is happening as regards to
                page-life-time.

                Are you trying to populate the datagrid and the CR on the same page request?

                Or are you trying to populate the datagrid on one page request....and the CR
                on another (second) page request.

                If the latter, then I'm still in favor of what I told you before...about
                putting the (populated) dataset into Session memory.

                ...

                I know you're a newbie, at the same time, the most basic concepts you need
                to get straight are:

                1. Lifetime/cycle of a single page request.
                2. How to put objects (like your populated dataset object) into the Session
                object.

                ...


                "Brock" <wade.brock@yah oo.comwrote in message
                news:6e5bcd97-785b-4a63-a499-55aba7e48234@m3 g2000hsc.google groups.com...
                Hi Sloan... another poster on 'microsoft.publ ic.dotnet.langu ages.vb'
                suggested using something like:

                MyCrystalReport .SetDataSource( MyDataGrid.Data Source)

                - to set the CR datasource... I'm guessing placing that in my code-
                behind .aspx.vb (?) - maybe in the event handler for a button that
                displays the reportViewer?
                If that's the case would I go into the CR Datasource wizard and spell-
                out something to let CR know this is where to look? My CR I'm writing
                resides as an object in the actual project, but I don't know how much
                CR recognizes datasources and how explicit the location needs to
                read... thanks! Brockus


                On Jul 21, 4:43 pm, "sloan" <sl...@ipass.ne twrote:
                Session:http://www.aspfree.com/c/a/ASP.NET/A...ion-Objects-in...
                >
                Session belongs to Asp.Net, not CR.
                >
                ..........
                >
                This is where you can store an object for later retrieval ( after a page
                displays ).
                >
                "Brock" <wade.br...@yah oo.comwrote in message
                >
                news:fbf79205-93b8-4013-b4be-e15196b9c1bf@c5 8g2000hsc.googl egroups.com...
                My apologies, but I'm a real newbie on several key issues. One is how
                to access the "Session" and again how to specify in CR itself what its
                datasource is.
                >
                On Jul 21, 3:11 pm, "sloan" <sl...@ipass.ne twrote:
                >
                >
                >
                Ok, since you're in a web world...you gotta keep some stuff straight.
                >
                Your attempt to "re-get" the DataSource ~from~ the DataGrid after the
                page
                is rendered is not a good strategy.
                >
                You also need to remember that once a page displays, alot of things you
                had
                in the code behind are not there anymore, unless you specifically save
                them
                somewhere.
                (Like the Session as the usual suspect).
                >
                So I will outline something that I think is the correct approach.
                >
                On the page_load...... ..
                Populate your source data (dataset) however you normally do this. I
                will call this the model from now on.
                Put the model in the Session object using a unique keyname.
                Bind the model to the DataGrid you have on the page already.
                >
                You now have two things:
                1. The original data inside the Session object.
                2. A ~display~ of the original data on the user's browser.
                >
                The user makes changes.
                >
                Now you need to COLLECT the information the user changed by iterating
                over all the rows in the datagrid, and pulling out the values.
                Tip: Use a hidden object for those pieces of information you don't
                want to display, but want to keep around.
                Put this data into a new dataset (a new "model").
                You can throw this into the Session object as well (if you want to) with
                a DIFFERENT key name.
                >
                Optional:
                Use the model(1) and the model(2) and create a massaged version of
                the data.
                >
                Take the new model , and use the PUSH method to populate the Crystal
                Report.
                >
                PS
                You should be able to bind the datagrid aganst this object
                Dim emps As Employees
                without artificially converting it to a dataset/datatable. Have you
                tried
                this yet?
                >
                "Brock" <wade.br...@yah oo.comwrote in message
                >
                news:8429053c-2fcf-4536-b0ad-0941cf592ef4@m7 3g2000hsh.googl egroups.com...
                I tried to adapt your method, well I should say I got totally lost in
                the process. Back to your reply, ad I do appreciate the help:
                >
                "I would go with the PUSH method of CR (crystal report) development.
                And instead of worrying about the datagrid as the SOURCE, cache
                (session?)
                the dataset (or datatable possibly) and use it as the source for the
                datagrid AND then the report."
                >
                I went into my report to use the CR DatabaseExpert and stumbled when
                trying to decide what to put in for my datasource. My datasource for
                the datagrid itself gets populated with this code:
                >
                Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
                System.EventArg s) Handles MyBase.Load
                'Put user code to initialize the page here
                'lblWelcome.Tex t = "Hello " & Global.UserSecu rity.Fname.Trim &
                " " & Global.UserSecu rity.Lname
                Dim act As Action
                Dim pos As Position
                Dim empname As String
                Dim lvi As ListItem
                Dim Employee As Employee
                Dim empcount As Integer
                act = (New
                ActionBroker).G etActionCurrent (Global.UserSec urity.EmpId, Today,
                Global.UserName , Global.UserPass word, Global.appDataS ource)
                pos = (New PositionBroker) .GetPosition(ac t.PositionID,
                Global.UserName , Global.UserPass word, Global.appDataS ource)
                m_department = pos.Department. Name
                Dim emps As Employees = (New
                EmployeeBroker) .GetCurrentEmpl oyeesByDepartme nt(m_department ,
                Global.UserName , Global.UserPass word, Global.appDataS ource)
                Dim dt As New DataTable
                Dim count As Integer = 0
                For Each emp As Employee In emps
                SetListViewItem (emp, dt, count)
                count = count + 1
                Next
                dgEmployees.Dat aSource = dt
                dgEmployees.Dat aBind()
                End Sub
                Private Sub SetListViewItem (ByVal dr As Employee, ByVal dt As
                DataTable, ByVal count As Integer)
                If count = 0 Then
                dt.Columns.Add( "Emp #")
                dt.Columns.Add( "Last Name")
                dt.Columns.Add( "First Name")
                dt.Columns.Add( "Title")
                End If
                Dim EmpPos As Action = (New
                ActionBroker).G etActionCurrent (dr.Key, Today, Global.UserName ,
                Global.UserPass word, Global.appDataS ource)
                Dim employee As DataRow = dt.NewRow
                employee("Emp #") = dr.Key
                employee("Last Name") = dr.LastName
                >
                employee("First Name") = dr.FirstName
                employee("Title ") = EmpPos.WorkAgai nstInfo.Title
                dt.Rows.Add(emp loyee)
                End Sub 'SetListViewIte m
                >
                The immediate challenge is that the datasource I was given by the
                powers that be was a precompiled DLL with stored procedures and
                database connections made to an Oracle database. So I didn't know the
                foggiest idea of how the above code could be adapted/used to provide
                CR with its data needs. I thought it might be in this specific case
                more manageable for this newbie to find a way of using the datagrid as
                the CR source (not that I know how to approach that either). But I can
                see the challenges with caching and viewstate in a more complex page
                than what I'm doing.
                >
                So any clues would be great... thanks! Brockus
                >
                On Jul 21, 12:54 pm, "sloan" <sl...@ipass.ne twrote:
                >
                I already responded to this post last week.
                >
                ..
                >
                Did you attempt my advice?
                >
                "Brock" <wade.br...@yah oo.comwrote in message
                >
                >news:6187b93 7-174f-47a2-8569-415ae22eb0e6@r6 6g2000hsg.googl egroups.com...
                >
                I am trying to populate a Crystal Report from data in my DataGrid.
                The
                reason for this is that I want the user to be able to change values
                without updating the database, but still have their report reflect
                the
                values they anticipate committing to see hypothetical totals of
                columns from a set of records. These records are displaying properly
                on my DataGrid but I'm not sure how to get Crystal Reports 10 to use
                as its datasource the dataset in memory that could be had directly
                from the datagrid.
                >
                I'm guessing I need to Dim a new DataSet, populate it from the
                datagrid, and set the new dataset as the datasource for CR. But how?
                >
                How can I specify that the Datagrid's DataSource property can be
                explicitly cast as a DataSet object that CR can pick up. And how in
                CR
                do I tell it that this resultingDataSe t is what it needs for the
                report?
                >
                I found a snippet of code that may work as PART of the solution, but
                I
                need a little direction.
                Private Sub FillDataSet(ByV al DataFromGrid As DataSet)
                DataFromGrid = CType(dgEmploye es.DataSource, DataSet)
                End Sub- Hide quoted text -
                >
                - Show quoted text -- Hide quoted text -
                >
                - Show quoted text -- Hide quoted text -
                >
                - Show quoted text -

                Comment

                • Mark Rae [MVP]

                  #9
                  Re: populating Crystal Reports from DataGrid data

                  "sloan" <sloan@ipass.ne twrote in message
                  news:OpsXp$A7IH A.4112@TK2MSFTN GP05.phx.gbl...
                  That's why multi posting stinks
                  Not as much as top-posting, though...


                  --
                  Mark Rae
                  ASP.NET MVP


                  Comment

                  Working...