0

レポートのフォームを開くために必要なすべてのクリスタルレポートを受け取るクラスがあります(スイッチと多くのケース)。

このコードを毎回コピーして貼り付ける必要があります

if (sender.GetType() == typeof(CheckBox))
{
    foreach (CheckBox elemento in flowLayoutPanel1.Controls.OfType<CheckBox>())
    {
        if (elemento.Checked)
        {
            foreach (string elemento2 in ListaTodos)
            {
                string Name = elemento.Tag.ToString();
                if (Name.Substring(Name.Length - 1, 1) == elemento2.Substring(elemento2.Length - 1, 1))
                {
                    crParceiro.ReportDefinition.ReportObjects[Name].ObjectFormat.EnableSuppress = false;
                    crParceiro.ReportDefinition.ReportObjects[elemento2].ObjectFormat.EnableSuppress = false;
                }
            }
        }
        else
        {
            foreach (string elemento2 in ListaTodos)
            {
                string Name = elemento.Tag.ToString();
                if (Name.Substring(Name.Length - 1, 1) == elemento2.Substring(elemento2.Length - 1, 1))
                {
                    crParceiro.ReportDefinition.ReportObjects[Name].ObjectFormat.EnableSuppress = true;
                    crParceiro.ReportDefinition.ReportObjects[elemento2].ObjectFormat.EnableSuppress = true;
                }
            }
        }
    }
}

問題:コードのこの部分をそこに貼り付ける関数と triend を作成しました...そしてcrParceiro.ReportDefinitioncrParceiro.ReportDefinition.ReportsObjectを渡しまし たが、設定されたプロパティがなく、設定して REF に戻ることはできません私たちのアウト...

値とLinq式を返そうとしました(それは...「オブジェクトにプロパティが設定されていません」と表示されます)成功しません**Linq Expと戻り値の参照:**ここにリンク

問題の良い例は次のとおりです。

ReportDefinition teste = new ReportDefinition();
teste.ReportObjects = null;

//Error: Property or idexer ...cannot be assigned to -- its read only.

私に何ができる?私はとても迷っています..

4

1 に答える 1

1

投稿したコードでは、を null またはその他の値に設定していません。ReportObjectsインデックスによってアイテムにReportObjectsアクセスし、これらのアイテムのプロパティを変更していますが、直接ではありませんReportObjects

したがって、これは機能するはずです。

private void YourMethod(ReportObjects repObjs, List<string> ListaTodos)
{
    foreach (CheckBox elemento in flowLayoutPanel1.Controls.OfType<CheckBox>())
    {
        bool enableSuppress ;

        //enableSuppress changes based on the the "elemento" being checked or not
        enableSuppress = !elemento.Checked ;

        foreach (string elemento2 in ListaTodos)
        {
            string Name = elemento.Tag.ToString();

            if (Name.Substring(Name.Length - 1, 1) == elemento2.Substring(elemento2.Length - 1, 1))
            {
                repObjs[Name].ObjectFormat.EnableSuppress = enableSuppress;
                repObjs[elemento2].ObjectFormat.EnableSuppress = enableSuppress;
            }
        }
    }
}

次に、現在の呼び出しで次のように使用します

if (sender.GetType() == typeof(CheckBox))
{
    YourMethod(crParceiro.ReportDefinition.ReportObjects, ListaTodos) ;
}
于 2013-09-11T13:32:59.523 に答える