我有这个c#脚本,它根据TWA的值改变文本的颜色。虽然它主要起作用,但如果
则不会改变 TWA value is >=85 (where it should be yellow) and >= 90 (where it should be red)
。
如何解决这个问题?
这是脚本:
protected System.Drawing.Color GetColorForLabel(string text)
{
int theTWAValue;
if (text != null && int.TryParse(text, out theTWAValue) && theTWAValue >= 0)
{
return (theTWAValue < 90) ? System.Drawing.Color.Yellow : System.Drawing.Color.Red;
}
return System.Drawing.Color.Green;
}
其他信息:
在用户从下拉列表中选择某些作业代码并且所有数据值来自access database
Edit2:即使在debugging
之后我还没有找到解决方案,为什么我的if语句失败会有一些帮助
编辑3:这是代码的其余部分:
<asp:SqlDataSource id="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:2007 SoundAssist VER 1.0.5 05-12-2011 ( 2013-06-24)ConnectionString %>" ProviderName="<%$ ConnectionStrings:2007 SoundAssist VER 1.0.5 05-12-2011 ( 2013-06-24)ConnectionString.ProviderName %>" SelectCommand="SELECT [Plant] FROM [PLANT]">
</asp:SqlDataSource>
<asp:DropDownList id="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource1" DataTextField="Plant" DataValueField="Plant" Height="85px" Width="393px">
</asp:DropDownList>
<asp:SqlDataSource id="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:2007 SoundAssist VER 1.0.5 05-12-2011 ( 2013-06-24)ConnectionString %>" ProviderName="<%$ ConnectionStrings:2007 SoundAssist VER 1.0.5 05-12-2011 ( 2013-06-24)ConnectionString.ProviderName %>" SelectCommand="SELECT [Plant], [Group No#] AS column1, [Group] FROM [Temp Table that contains TWA values] WHERE ([Plant] = ?)">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="Plant" PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:DropDownList id="DropDownList2" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource2" DataTextField="Group" DataValueField="column1" Height="30px" Width="394px">
</asp:DropDownList>
<asp:SqlDataSource id="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:2007 SoundAssist VER 1.0.5 05-12-2011 ( 2013-06-24)ConnectionString %>" ProviderName="<%$ ConnectionStrings:2007 SoundAssist VER 1.0.5 05-12-2011 (2013-06-24)ConnectionString.ProviderName %>" SelectCommand="SELECT [Plant], [Group No#] AS column1, [Group], [Job Code] AS Job_Code, [Job Function] AS Job_Function, [Job Classification] AS Job_Classification FROM [Temp Table that contains TWA values] WHERE (([Plant] = ?) AND ([Group No#] = ?))">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="Plant" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="DropDownList2" Name="column1" PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:DropDownList id="DropDownList3" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource3" DataTextField="Job_Classification" DataValueField="Job_Classification" Height="17px" Width="384px">
</asp:DropDownList>
<asp:ListView id="YourListView" OnLoad="YourListView_Load" runat="server" DataSourceID="SqlDataSource4">
<ItemTemplate>
<span style="">Plant:
<asp:Label id="PlantLabel" runat="server" Text='<%# Eval("Plant") %>' />
<br />
column1:
<asp:Label id="column1Label" runat="server" Text='<%# Eval("column1") %>' />
<br />
Group:
<asp:Label id="GroupLabel" runat="server" Text='<%# Eval("Group") %>' />
<br />
Job_Code:
<asp:Label id="Job_CodeLabel" runat="server" Text='<%# Eval("Job_Code") %>' />
<br />
Job_Classification:
<asp:Label id="Job_ClassificationLabel" runat="server" Text='<%# Eval("Job_Classification") %>' />
<br />
Job_Function:
<asp:Label id="Job_FunctionLabel" runat="server" Text='<%# Eval("Job_Function") %>' />
<br />
Job_Description:
<asp:Label id="Job_DescriptionLabel" runat="server" Text='<%# Eval("Job_Description") %>' />
<br />
TWA:
<asp:Label id="TWALabel" runat="server" Text='<%# Eval("TWA") %>' ForeColor='<%# GetColorForLabel( Eval("TWA") as string ) %>'/>
<br />
<br />
</span>
</ItemTemplate>
</asp:ListView>
<asp:SqlDataSource id="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:2007 SoundAssist VER 1.0.5 05-12-2011 ( 2013-06-24)ConnectionString %>" ProviderName="<%$ ConnectionStrings:2007 SoundAssist VER 1.0.5 05-12-2011 ( 2013-06-24)ConnectionString.ProviderName %>" SelectCommand="SELECT [Plant], [Group No#] AS column1, [Group], [Job Code] AS Job_Code, [Job Classification] AS Job_Classification, [Job Function] AS Job_Function, [Job Description] AS Job_Description, [TWA] FROM [Temp Table that contains TWA values] WHERE (([Plant] = ?) AND ([Group No#] = ?) AND ([Job Classification] = ?))">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="Plant" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="DropDownList2" Name="column1" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="DropDownList3" Name="Job_Classification" PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
我仍然无法修复错误,因此输入仍然非常有价值
答案 0 :(得分:1)
text null 或 int.TryParse 失败。
int theTWAValue;
string text = "95";
if (text != null && int.TryParse(text, out theTWAValue) && theTWAValue >= 0)
{
Console.WriteLine((theTWAValue < 90) ? "System.Drawing.Color.Yellow" : "System.Drawing.Color.Red");
}
打印:System.Drawing.Color.Red
答案 1 :(得分:0)
更改决定:
return (theTWAValue < 90) ? System.Drawing.Color.Yellow : System.Drawing.Color.Red
到此:
return (theTWAValue < 85) ? Color.Green :
(theTWAValue < 90) ? Color.Yellow :
Color.Red;
看,发生了什么,如果它解析你没有评估所有三种情况。拥有默认返回Color.Green
是可以的,所以请保留它,但是如果它解析并且它是>= 0
那么你需要评估所有三个条件。
如Kevin DeVoe所述,在这种情况下,由于您总是获得Green
,因此看起来值从不实际解析为{ {1}}。 int
中的代码仍然是错误的,因为它没有所有三个场景,但你的根本问题是它没有解析 - 永远。
答案 2 :(得分:0)
你的问题在
if (text != null && int.TryParse(text, out theTWAValue) && theTWAValue >= 0)
你需要对它进行调试并逐步完成它以找出它失败的原因。在if语句之前添加它并检查控制台。
if(text == null)
Console.WriteLine("Text is null");
if(!int.TryParse(text, out theTWAValue))
Console.WriteLine("Parse Failed");
Console.WriteLine("TWA Value: " + theTWAValue);
答案 3 :(得分:0)
text
在所有情况下均为null
。
尝试更换:
ForeColor='<%# GetColorForLabel( Eval("TWA") as string ) %>'
使用:
ForeColor='<%# GetColorForLabel( "" + Eval("TWA") ) %>'
或者您可以使用.ToString()
,但我确实觉得它更复杂......接受object
作为GetColorForLabel()
的输入也会有效。
注意:你已经做了相同的事情:
string s = (object)5 as string; // always going to be null