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

问题:我创建了一个函数并试图将这部分代码粘贴到那里......我通过了crParceiro.ReportDefinitioncrParceiro.ReportDefinition.ReportsObject 但它没有 set 属性,我无法设置它并返回 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

在您发布的代码中,您没有将其设置ReportObjects为 null 或任何其他值。您正在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 回答