2010-05-29 57 views
0

在我的.aspx页面中我有我的DataList:如何找到DataList控件中的一个标签,它被设置为True

<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

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; 
     } 
    } 
} 
+0

嘿克劳迪奥,它仍然无法正常工作工作的一个片段。当我尝试了你的建议,页面加载没有错误,但文本设置为True的标签没有显示背景颜色。谢谢。 – Doug 2010-05-29 19:06:02

+0

@Doug。请尝试在事件OnItemDataBound上执行相同的代码 – 2010-05-29 21:04:35

+0

YES!现在它正在工作。应该首先使用OnItemDataBound。谢谢克劳迪奥。 – Doug 2010-05-29 21:15:40

相关问题