Frage

Ich habe einige Probleme mit dem Erhalten der Formatierung korrekt auftreten. Ich glaube, es stammt von dem, was wahrscheinlich einem falschen Verständnis der Ereignisse, dass ich die Änderungen in zu machen versucht bin.

jede Richtung wäre toll

    private void so_FetchData(object sender, FetchEventArgs eArgs)
    {
        if (m_so != null && m_so.Rows.Count > (m_soRowCount + 1))
        {
            DataRow soDr = m_so.Rows[m_soRowCount++];
            if (soDr != null)
            {
                var compResID = (int) soDr["CompResID"];
                var result = (ComplianceLevel) soDr["Result"];
                var sectNum = (int) soDr["JobSectType"];
                var sectName = soDr["S" + sectNum + "Name"] as string;
                var sectTxt = soDr["S" + sectNum + "Text"] as string;

                Fields["CompLev"].Value = (result == ComplianceLevel.OtherThanSerious) ? "Other Than Serious" : result.ToString();

                m_sectInfo = new SectInfo(sectName, sectTxt);
                m_causes = new Causes(compResID);
                m_actions = new Actions(compResID);
                subReport1.Report = m_sectInfo;
                subReport2.Report = m_causes;
                subReport3.Report = m_actions;
                eArgs.EOF = false;
            }
        }
        else
        {
            eArgs.EOF = true;
        }
    }

    private void eh_BeforePrint(object sender, EventArgs e)
    {
        //decide where the bottom border should be draw to
        if (m_actions != null && m_actions.ShouldShowBottBorder)
        {
            subReport3.Border.BottomStyle = BorderLineStyle.ThickSolid;
            subReport2.Border.BottomStyle = BorderLineStyle.Solid;
        }
        else if (m_causes != null && m_causes.ShouldShowBottBorder)
        {
            subReport2.Border.BottomStyle = BorderLineStyle.ThickSolid;
        }
        else
        {
            subReport1.Border.BottomStyle = BorderLineStyle.ThickSolid;
        }
    }

ist das Problem, dass jedes Mal, wenn ich Schritt durch die eh_BeforePrint Methode werden die Werte immer auf false gleichsetzen, auch wenn ich Schritt durch die Unterberichte und die Werte richtig eingestellt sind. Was geschieht die Bool-Eigenschaft, um zu bewirken falsch zurücksetzen?

Just es zu ändern, wenn es irgendwelche Aufzeichnungen sind in den fetch_data Verfahren jeden Teilberichtes zu drucken.

    private void Causes_FetchData(object sender, FetchEventArgs eArgs)
    {
        if (m_pos < m_corrs.Count)
        {
            if (!ShouldShowBottBorder)
                ShouldShowBottBorder = true;
            //...
         } 
     }
War es hilfreich?

Lösung

Sie können nicht sicher sein, dass das Before Ereignis auslöst genau nach dem entsprechenden FetchData Ereignisse. oft für mehrere Datensätze FetchData kann zum Beispiel Feuer, aber aufgrund einiger zusammenhalten Logik in der Layout-Engine, kann es mehrere Datensätze, bevor Active weiß, welche Seite wird es einen Abschnitt begehen. Daher ist es ziemlich üblich, FetchData für mehrere Ereignisse ausgelöst werden, bevor die entsprechenden Ereignisse Before angehoben werden.

Wenn ich verstehe Ihren Code richtig gibt es ein größeres Problem though. Es scheint, Sie Werte in Ihrem subreports kalkulieren (m_causes und m_actions erscheinen tatsächliche subreports sein). Wenn das der Fall ist, können Sie nicht zuverlässig Werte in Ihrem subreports berechnen und Bericht an die Eltern übergeben werden. Stattdessen müssen Sie diese Werte in Ihrer Mutter Bericht berechnen. Allerdings, in der Regel können Sie einig gemeinsam genutzte Funktion hinzufügen, um den Wert zu berechnen und aus dem übergeordneten Bericht nennen, und dann diesen Wert in die subreports passieren.

Kommentar hier mit etwas mehr Informationen, wenn Sie spezielle Fragen haben über das zu tun.

Auf einem nicht verwandten Notiz können Sie einen ziemlich deutlichen Leistungsschub, wenn man die Art und Weise ändern, werden Sie Ihre subreports initialisiert. Immer initialisieren Ihre subreports im ReportStart Ereignisse und dann ihre Daten in dem Format-Ereignisse des Abschnitts den Subreport Steuerelement enthält. Auf diese Weise können sich subreport einmal initialisieren, anstatt jedes subureport für jeden Datensatz zu initialisieren. Zum Beispiel:

private void so_ReportStart()
{
    subreport1.Report = new SectInfo();
    subreport2.Report = new Causes();
    subreport3.Report = new Actions();
}
private void Detail_Format()
{ // assuming Detail is the section containing your subreports:

    ((SectInfo)subreport1.Report).SetParameters(Fields["sectName"].Value, Fields["sectTxt"].Value);
    ((Causes)subreport2.Report).SetParameters(Fields["compResID"].Value);
    ((Actions)subreport3.Report).SetParameters(Fields["compResID"].Value);
}

Sie würden Setup diese „Fields“ Werte in FetchData ähnlich, wie Ihr die subreports jetzt initialisiert. Etwas wie folgt aus:

private void so_FetchData(object sender, FetchEventArgs eArgs)
{
    if (m_so != null && m_so.Rows.Count > (m_soRowCount + 1))
    {
        DataRow soDr = m_so.Rows[m_soRowCount++];
        if (soDr != null)
        {
            var compResID = (int) soDr["CompResID"];
            var result = (ComplianceLevel) soDr["Result"];
            var sectNum = (int) soDr["JobSectType"];
            var sectName = soDr["S" + sectNum + "Name"] as string;
            var sectTxt = soDr["S" + sectNum + "Text"] as string;

            Fields["CompLev"].Value = (result == ComplianceLevel.OtherThanSerious) ? "Other Than Serious" : result.ToString();
            /** BEGIN NEW CODE **/
            Fields["sectName"].Value = sectName;
            Fields["sectTxt"].Value = sectTxt;
            Fields["compResID"].Value = compResId;
            /** END NEW CODE **/

            /** OLD CODE:
            m_sectInfo = new SectInfo(sectName, sectTxt);
            m_causes = new Causes(compResID);
            m_actions = new Actions(compResID);
            subReport1.Report = m_sectInfo;
            subReport2.Report = m_causes;
            subReport3.Report = m_actions;
            **/     
            eArgs.EOF = false;
        }
    }
    else
    {
        eArgs.EOF = true;
    }
}

Um mehr über die Ereignisse in Active lernen finden Sie unter der Veranstaltungen Bericht Konzepte Thema in der Active Online-Hilfe . Weitere Informationen über die Daten in Subreports vorbei finden Sie unter Subreports mit Laufzeit-Datenquellen in die Active Online-Hilfe .

Scott Willeke
GrapeCity inc.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top