如何在DataList中找到设置为True的一个Label

时间:2010-05-29 18:36:02

标签: c# foreach datalist itemtemplate findcontrol

在我的.aspx页面中,我有我的DataList:

 <asp:DataList ID="DataList1" runat="server" DataKeyField="ProductSID" 
    DataSourceID="SqlDataSource1" onitemcreated="DataList1_ItemCreated" 
    RepeatColumns="3" RepeatDirection="Horizontal" Width="1112px">
    <ItemTemplate>
        ProductSID:
        <asp:Label ID="ProductSIDLabel" runat="server" Text='<%# Eval("ProductSID") %>' />
        <br />
        ProductSKU:
        <asp:Label ID="ProductSKULabel" runat="server" Text='<%# Eval("ProductSKU") %>' />
        <br />
        ProductImage1:
        <asp:Label ID="ProductImage1Label" runat="server" Text='<%# Eval("ProductImage1") %>' />
        <br />
        ShowLive:
        <asp:Label ID="ShowLiveLabel" runat="server" Text='<%# Eval("ShowLive") %>' />
        <br />
        CollectionTypeID:
        <asp:Label ID="CollectionTypeIDLabel" runat="server"  Text='<%# Eval("CollectionTypeID") %>' />
        <br />
        CollectionHomePage:
        <asp:Label ID="CollectionHomePageLabel" runat="server"  Text='<%# Eval("CollectionHomePage") %>' />
        <br />
        <br />
    </ItemTemplate>
</asp:DataList>

在我的代码中使用ItemCreated事件来查找并设置label.backcolor属性。 (注意:我正在使用递归的findControl类

protected void DataList1_ItemCreated(object sender, DataListItemEventArgs e)
    {

        foreach (DataListItem item in DataList1.Items)
        {
          if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
          { 
          Label itemLabel = form1.FindControlR("CollectionHomePageLabel") as Label;
          if (itemLabel !=null || itemLabel.Text == "True")
          {
              itemLabel.BackColor = System.Drawing.Color.Yellow;
          }
     }

当我运行页面时,找到了itemLabel,并显示颜色。但它将itemLabel颜色设置为DataList中找到的itemLabel的第一个实例。在DataList中的所有itemLabel中,只有一个将具有text = True - 这应该是拾取背景颜色的标签。另外:itemLabel正在数据库中选取一个名为“CollectionHomePage”的列,它是True / False位数据类型。我一定会错过一些简单的事情......感谢你的想法。

1 个答案:

答案 0 :(得分:1)

对每个数据列表项执行

ItemCreated事件,它不是全局的,所以你为每个项目执行相同的代码,我担心你的情况有问题。

您只需要检查当前项目是否已创建。此外,由于在创建的项目上数据尚未绑定到您需要使用ItemDataBound事件的项目

这里有一个可能适合您的代码段

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
    foreach(Control control in e.Item.Controls)
    {
        if (control is Label && (control as Label).Text.Equals("True"))
        {
            (control as Label).BackColor = System.Drawing.Color.Yellow;
        }
    }
}