我们的一份报告遇到了问题.在我们的一个Tablix中,文本框具有以下表达式:
=Iif(Fields!SomeField.Value = 0, 0, Fields!SomeOtherField.Value / Fields!SomeField.Value)
Run Code Online (Sandbox Code Playgroud)
哪个应该是不言自明的.如果"SomeField"为零,则将文本框值设置为零,否则将其设置为"SomeOtherValue/SomeValue".
我们难以理解的是,报告仍然会抛出一个运行时异常"试图除以零",即使上面的表达式可以防止这种情况发生.
为了确保零检查正常,我们在表达式上摆弄了一下,并且
=Iif(Fields!SomeField.Value = 0, "Yes", "No")
Run Code Online (Sandbox Code Playgroud)
工作得很漂亮.数据实际上为零的情况导致文本框显示"是",反之亦然.所以检查工作正常.
我的直觉是,报表呈现引擎在运行时抛出异常,因为它"看起来"好像我们要除以零,但事实上,我们不是.
有没有人遇到过同样的问题?如果是这样,你做了什么让它工作?
我正在制作一个在 Windows 窗体应用程序中使用的扩展方法库。我打算创建的方法之一将使在输入控件上设置错误状态更容易,例如
public static void SetError(this System.Windows.Forms.TextBox textBox, string errorMessage)
{
if (string.IsNullOrEmpty(errorMessage))
{
//reset control state
textBox.BackColor = System.Drawing.SystemColors.WindowText;
}
else
{
//set background colour to a nice shade of red
textBox.BackColor = System.Drawing.Color.MistyRose;
}
//try to locate an ErrorProvider on the control's containing form.
var errorProvider = LocateErrorProvider(textBox);
if (errorProvider != null)
{
//set error message on error provider (or clear it)
errorProvider.SetError(textBox, errorMessage);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试找出LocateErrorProvider方法。我想要做的是检查我的表单上是否存在 ErrorProvider,然后仅在它存在时才使用它。
ErrorProvider 是 aComponent而不是 a Control …
我有一些参数正在通过,但有一些铸造问题,我想知道什么是最好的方法来做到这一点.
ReportExecution2005.ParameterValue[] parameters
parameters[0].Label = "reportID";
parameters[0].Value = "5"; /* I want to pass a variable here not an actual string value -- I want it to be of type int. I tried to cast with no luck*/
parameters[1].Label = "ReportName";
parameters[1].Value = reportName;
parameters[2].Value = reportID.ToString;
Run Code Online (Sandbox Code Playgroud)