Page 2 of 2

Overriding the StiDesigner.SavingReport event occurs twice in Ribbon GUI

Posted: Tue Feb 08, 2011 10:25 am
by TheOmniAdam
That seems to have remedied the problem, and I'm grateful, but in testing to ensure this solution worked I came across another problem. When I create a new document, it ALWAYS treats saving as a new save, even if I've already saved it. How can I tell it in the override that it's no longer a new save?

Overriding the StiDesigner.SavingReport event occurs twice in Ribbon GUI

Posted: Wed Feb 09, 2011 2:03 am
by Alex K.
Hello,

Please modify your code on

Code: Select all

Public Sub SaveWithoutDialog(ByVal sender As Object, ByVal e As Stimulsoft.Report.Design.StiSavingObjectEventArgs)
    ' Your code for saving
    ...
    Dim Report As StiReport = DirectCast(sender, StiDesignerControl).Report
    Report.IsModified = False
    e.Processed = True
End Sub
Thank you.

Overriding the StiDesigner.SavingReport event occurs twice in Ribbon GUI

Posted: Thu Feb 10, 2011 10:32 am
by TheOmniAdam
That doesn't seem to work. Testing with this new code in doesn't seem to change anything- I'm noticing in debugging however that every time I choose to save on a "New" designer file it always has the e.SaveAs set to True, even after I've saved it once and it is not a SaveAs but a regular save. SaveAs is readonly so I can't just directly change it and I use saveas in existing files to differentiate between save and SaveAs so I need to find a way for this to get properly reset when it is a new report that has already been saved.

Overriding the StiDesigner.SavingReport event occurs twice in Ribbon GUI

Posted: Fri Feb 11, 2011 6:33 am
by Alex K.
Hello,

Please check the following code. it works without problems.

Code: Select all

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Report As Stimulsoft.Report.StiReport = New Stimulsoft.Report.StiReport
        Report.ScriptLanguage = Stimulsoft.Report.StiReportLanguageType.VB
        Report.IsModified = False

        AddHandler Stimulsoft.Report.Design.StiDesigner.SavingReport, AddressOf Me.SaveWithoutDialog
        Report.Design()
        RemoveHandler Stimulsoft.Report.Design.StiDesigner.SavingReport, AddressOf Me.SaveWithoutDialog

    End Sub

    Public Sub SaveWithoutDialog(ByVal sender As Object, ByVal e As Stimulsoft.Report.Design.StiSavingObjectEventArgs)
        MessageBox.Show("!!!")
        Dim Report As StiReport = DirectCast(sender, StiDesignerControl).Report
        Report.IsModified = False
        e.Processed = True
    End Sub
Thank you.

Overriding the StiDesigner.SavingReport event occurs twice in Ribbon GUI

Posted: Fri Feb 11, 2011 10:01 am
by TheOmniAdam
This doesn't seem to have any effect, but I'm wondering if this is because both SavewithoutDialog and SavetoDatabase are both within a class that inherits stireport? I actually just call clsQPReports instead of StiReport which is why you can see in my original code it actually calls MyBase.Save- but I didn't think this would matter. I'm not sure what this line of code is expected to do

Code: Select all

Dim Report As StiReport = DirectCast(sender, StiDesignerControl).Report
I've tried modifying my code so that I would call

Code: Select all

Dim report As clsQPReports = DirectCast(sender, Stimulsoft.Report.Design.StiDesignerControl).Report
This, however, has no effect. Is it because these are all taking place within the object that inherits stireport? Here is a more accurate picture of my code as it stands now.

Code: Select all

public sub DesignReport (byval strFileName as String)
                    Dim Report As clsQPReports = New clsQPReports
            Report.ScriptLanguage = Stimulsoft.Report.StiReportLanguageType.VB
            Report.RegData("DataSet", grdPreviewResults.DataSource)
            Report.Load(strFileName)
                    RemoveHandler Stimulsoft.Report.Design.StiDesigner.SavingReport, AddressOf Report.SaveWithoutDialog
                    Report.IsModified = False
            AddHandler Stimulsoft.Report.Design.StiDesigner.SavingReport, AddressOf clsQPReports.SaveWithoutDialog
            Report.Design()
            Report.Dispose()
End Sub
clsQPReports:

Code: Select all

Public Class clsQPReports
    Inherits Stimulsoft.Report.StiReport
    
Public Sub SaveWithoutDialog(byVal sender as Object, ByVal e as Stimulsoft.Report.Design.StiSavingObjectEventArgs)
        'Check if this is initial save or save as option
        If LastPathSaved Is Nothing Or e.SaveAs = True Then
            Dim strTempSave As String = System.IO.Path.GetTempPath & "Report" & Now().ToString("MM_dd_yyyy HH_mm_ss") & ".mrt"
            Dim service As New Stimulsoft.Report.SaveLoad.StiXmlReportSLService()
            MyBase.Save(service, strTempSave)
            [b]Call SaveToDataBase(True, strTempSave)[/b]
        Else
            'If it is just a save, sometimes saving too frequently causes it to error out since it is still looking at the file
            Dim boolSaveWorked As Boolean = False
            Try
                MyBase.Save(LastPathSaved)
                boolSaveWorked = True
            Catch ex As Exception
            End Try
            'If so, perform a new save and use the new file as reference from now on, ignoring the old
            If boolSaveWorked = False Then
                Dim strTempSave As String = System.IO.Path.GetTempPath & "Report" & Now().ToString("MM_dd_yyyy HH_mm_ss") & ".mrt"
                Dim service As New Stimulsoft.Report.SaveLoad.StiXmlReportSLService()
                MyBase.Save(service, strTempSave)
            End If
            [b]Call SaveToDataBase(False, LastPathSaved)[/b]
        End If
              Dim Report As clsQPReports = DirectCast(sender, Stimulsoft.Report.Design.StiDesignerControl).Report
              Report.IsModified = False
        e.Processed = True
    End Sub

Public Sub SaveToDataBase(ByVal createNew As Boolean, ByVal filePath As String)
        'This call will save a serialized copy of the temporary saved .mrt file from the temp folder into the  Database
        Dim designer As New QP.ReportDesignerFile()
        Dim dt As DataTable = designer.RetrieveReportDesignerFile(DesignerID)
        Dim reportName As String = Me.ReportName
        Dim strDesignerFile As String = filePath
        Dim strComments As String = ""
        'Distinguish between creating a new 
        If dt.Rows.Count > 0 And createNew = False Then
            reportName = dt.Rows(0).Item(2).ToString
            strComments = dt.Rows(0).Item(3).ToString
            DesignerID = designer.SaveReportDesignerFile(DesignerID, reportName, strDesignerFile, strComments)
        Else
            Dim frmNewDesigner As New pfrmNewDesigner(reportName)
            Dim formResult As DialogResult
            formResult = frmNewDesigner.ShowDialog()
            reportName = frmNewDesigner.txtReportName.Text
            strComments = frmNewDesigner.txtComments.Text
            If reportName = "" Or formResult = DialogResult.Cancel Then
                Exit Sub
            End If
            DesignerID = 0
            DesignerID = designer.SaveReportDesignerFile(DesignerID, reportName, strDesignerFile, strComments)
            If ReportID  0 Then
                Dim tblTemp As DataTable = designer.ReportRelationships(ReportID)
                Dim boolDefault As Boolean = tblTemp.Rows.Count <= 0
                designer.SaveReportRelationship(ReportID, DesignerID, boolDefault)
            End If
        End If
        LastPathSaved = filePath
    End Sub


Does this provide any new insight into why every time I create a new file, every save is a save as?

Overriding the StiDesigner.SavingReport event occurs twice in Ribbon GUI

Posted: Mon Feb 14, 2011 5:12 am
by Alex K.
Hello,

Please send us a sample project which reproduces the problem.

Thank you.