所以我正在运行一个C#函数,它应该根据值改变文本的颜色。当我从列表视图中删除该函数时,它会输出值但是当我包含它时,它会输出我现在没有的东西,我终于弄清楚我的函数没有任何问题,但是我如何将我的数据绑定到列表视图所以我想知道我做错了什么。
这是我的代码:
<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, [TWA], [Job Classification] AS Job_Classification, [Job Function] AS Job_Function, [Job Description] AS Job_Description FROM [Temp Table that contains TWA values] WHERE (([Job Description] = ?) AND ([Group] = ?) AND ([Job Classification] = ?))">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList6" Name="Job_Description" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="DropDownList4" Name="Group" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="DropDownList5" Name="Job_Classification" PropertyName="SelectedValue" Type="String" />
</SelectParameters>
和我的列表视图行:
<asp:ListView id="YourListView" runat="server" DataSourceID="SqlDataSource3" OnItemDataBound="YourListView_ItemDataBound" >
我的色彩功能:
protected void YourListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
Label theTWALabel = (Label)e.Item.FindControl("TWALabel");
int theTWAValue = Convert.ToInt32(theTWALabel.Text);
if (theTWAValue >= 85)
{
if (theTWAValue < 90)
{
theTWALabel.CssClass = "YellowThis";
}
else
{
theTWALabel.CssClass = "RedThis";
}
}
}
}
以下是列表视图:
<ItemTemplate>
<span style="background-color: white;color: #333333; border: 2em; border-width:1em; border-color:black;">
Plant Name:
<asp:Label id="PlantLabel" runat="server" Text='<%# Eval("Plant") %>' />
<br />
Department #:
<asp:Label id="column1Label" runat="server" Text='<%# Eval("column1") %>' />
<br />
Department Name:
<asp:Label id="GroupLabel" runat="server" Text='<%# Eval("Group") %>' />
<br />
Job Code:
<asp:Label id="Job_CodeLabel" runat="server" Text='<%# Eval("Job_Code") %>' />
<br />
TWA
<asp:Label id="TWALabel" runat="server" Text='<%# Eval("TWA") %>' />
<br />
</span>
</ItemTemplate>
我也没有在(我的意思是Sql语句)中键入这些内容,我使用内置的asp.net连接向导来执行此操作,并且它为我创建了所有内容。
编辑:如果您有任何其他信息需要帮助回答此问题,请发表评论
Edit2:我可能需要if post back功能吗?
答案 0 :(得分:1)
问题是您正在尝试访问YourListView_ItemDataBound
事件处理程序中的控件,此时ListView
尚未加载。
尝试添加到ListView
事件处理程序onLoad
,然后在该方法中使用以下项目:
protected void YourListView_Load(object sender, EventArgs e)
{
Label theTWALabel;
int theTWAValue;
foreach (ListViewItem item in YourListView.Items)
{
theTWALabel = (Label)item.FindControl("TWALabel");
theTWAValue = Convert.ToInt32(theTWALabel.Text);
if (theTWAValue >= 85)
{
if (theTWAValue < 90)
theTWALabel.ForeColor = System.Drawing.Color.Yellow;
else
theTWALabel.ForeColor = System.Drawing.Color.Red;
}
}
}
答案 1 :(得分:1)
您可以尝试循环访问控件而不是使用FindControl。
if (e.Item.ItemType == ListViewItemType.DataItem)
{
foreach (Control c in e.Item.Controls)
{
if (c is Label && c.ID.Contains("TWALabel"))
{
Label theTWALabel = (Label)c
int theTWAValue = Convert.ToInt32(theTWALabel.Text);
if (theTWAValue >= 85)
{
if (theTWAValue < 90)
{
theTWALabel.CssClass = "YellowThis";
}
else
{
theTWALabel.CssClass = "RedThis";
}
}
}
}
}
即使.Net修改了ID名称,您也可以检查ID是否具有子字符串TWALabel并找到您的控件。
可能有更好的方法,但我想不出另一种我认识的方法。
答案 2 :(得分:0)
调用YourListView_ItemDataBound方法,因为List视图是数据绑定的。这就是asp.net在您的网格中为数据源中的每一行创建一行的地方,因此您将无法像控制中那样从控件中提取数据来访问这些数据。现在为时已晚,因为网格的旧版本已被丢弃。
我认为你可以