我有一个报告,它使用参数在运行时隐藏或显示图表上的数据。我有以下代码来读取参数并使用它来控制轴的可见性。
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[0].Value);
((SplineSeriesView)xrChart1.Series[1].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[1].Value);
((SplineSeriesView)xrChart1.Series[2].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[2].Value);
((SplineSeriesView)xrChart1.Series[3].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[3].Value);
((SplineSeriesView)xrChart1.Series[4].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[4].Value);
((SplineSeriesView)xrChart1.Series[5].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[5].Value);
因为系列0和系列1都绑定到同一个轴,所以我使用的是或运算符。我遇到的问题是当它们都是假的时候轴不会隐藏。这是我正在使用的代码:
bool zero = Convert.ToBoolean(this.Parameters[0].Value);
bool one = Convert.ToBoolean(this.Parameters[1].Value);
if ((zero = true)||(one = true))
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = true;
}
else if ((zero = false) && (one = false))
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = false;
}
如何让轴隐藏?提前感谢您的帮助。
答案 0 :(得分:1)
我认为您的问题是使用'='而不是'=='。表达式zero = true
将{0}设置为true
,此true
值用作表达式值。因此,在第一个条件检查'零'后总是变为真,'else'分支永远不会执行,因为'零'不再是假的。
事实上,表达式zero == true
仅等于zero
,因此您可以简化条件:
bool zero = Convert.ToBoolean(this.Parameters[0].Value);
bool one = Convert.ToBoolean(this.Parameters[1].Value);
if (zero || one) // true if 'zero' or 'one' is true
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = true;
}
else // goes here if both 'zero' and 'one' is false
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = false;
}
甚至
bool zero = Convert.ToBoolean(this.Parameters[0].Value);
bool one = Convert.ToBoolean(this.Parameters[1].Value);
bool axisVisible = zero || one;
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = axisVisible;
答案 1 :(得分:1)
重要的是要记住相等比较==
和settor运算符=
之间的区别。在if
语句中,您正在使用settor,并希望使用比较。
如果您使用正确的运算符,您的代码可能如下所示,这应该可以解决您的问题:
if ((zero == true)||(one == true))
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = true;
}
else if ((zero == false) && (one == false))
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = false;
}
您遇到问题的原因是您使用的是settor,它自动将零和一设置为true。因此,该程序将您的if
语句评估为:“if(true或true)”,这始终是真的。这就是将值设置为false的原因无效。
顺便说一下,你可以采取一些措施来避免这种错误。首先,您的编译器应该警告您没有使用相等运算符。其次,您可以养成将常量放在第一位的习惯:if (false = zero)
会产生编译时错误。 (就个人而言,我真的不喜欢那种编码风格,它不会干净利落地读给我,但你的里程可能会有所不同。)
我会将你的陈述重写为更清晰,但功能相同:
if (zero || one)
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = true;
}
else
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = false;
}
当你将布尔变量放入if语句时,没有充分的理由将它们与布尔常量进行比较。你的第二个if
根本不是必需的,因为如果第一个没有,那么它是唯一可能发生的情况。 (即“if!(zero || one)”===“!zero&&!one” - 它被称为DeMorgan的规则。)
事实上,你的整个if语句可以简化为一个明确的界限:
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = zero || one;