Свойство сброса стоимости в другом событии

StackOverflow https://stackoverflow.com/questions/4310332

  •  29-09-2019
  •  | 
  •  

Вопрос

У меня есть некоторые проблемы с получением форматирования правильно. Я считаю, что это связано с тем, что, вероятно, неверное понимание событий, в которых я пытаюсь внести изменения.

Любое направление было бы здорово

    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;
        }
    }

Этот вопрос заключается в том, что каждый раз, когда я выхожу через метод EH_BEFOREPRINT, значения всегда приравниваются к False, даже если я устанавливаю через доклады, и значения правильно устанавливаются. Что происходит, чтобы вызвать свойство Bool для сброса до False?

Просто изменяйте его, если есть какие-либо записи для печати в методе fetch_data каждого подчетов.

    private void Causes_FetchData(object sender, FetchEventArgs eArgs)
    {
        if (m_pos < m_corrs.Count)
        {
            if (!ShouldShowBottBorder)
                ShouldShowBottBorder = true;
            //...
         } 
     }
Это было полезно?

Решение

Вы не можете быть уверены, что событие FromPrint повышает точно после соответствующего события FetchData. Например, Fetchdata могут стрелять много раз для нескольких записей, но из-за некоторого хранения совместно логика в макетном двигателе, он может занять несколько записей до того, как ActiverePerports знает, какую страницу оно будет совершать раздел. Следовательно, для Fetchdata довольно распространено для нескольких событий до того, как поднимаются соответствующие события перед соответствующими преобразованиями.

Если я правильно понимаю ваш код, есть большая проблема, хотя. Похоже, что вы вычисляете значения в ваших подреточныхках (M_Causes и M_Conts, кажется, являются фактическими подрегуляторами). Если это так, вы не можете надежно рассчитать значения в ваших подрегулях и передайте их в родительский отчет. Вместо этого вам нужно будет рассчитать эти значения в вашем родительском отчете. Однако обычно вы можете добавить некоторую общую функцию для расчета значения и вызовов его из родительского отчета, а затем пройти это значение в подреточные.

Комментарий здесь с дополнительной информацией, если у вас есть конкретные вопросы о том, что это.

На несвязной заметке вы можете получить довольно значительный повышение производительности, если вы измените способ, которым вы инициализируете свои подделки. Всегда инициализируйте свои подделки в событии REPORTSTARTSART, а затем установите их данные в случае формата раздела, содержащего контроль Subreport. Таким образом, вы инициализируете каждый Subreport один раз вместо того, чтобы инициализация каждого подделка для каждой записи. Например:

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);
}

Вы будете настроить эти «поля» значения в FetchData, аналогичные, как ваш инициализация подделок сейчас. Что-то вроде следующее:

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;
    }
}

Чтобы узнать больше о событиях в ActiverePorts Концепции событий отчетов Тема в онлайн-справке Activereports. Отказ Чтобы узнать больше о передаче данных в подделки Subreports с источниками данных времени выполнения в онлайн-справке ActiverePorts.

Scott Willeke
GrapeCity inc.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top