0

私の .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 内のすべての itemLabels のうち、テキスト = True を持つのは 1 つだけです。これは、背景色を取得するラベルである必要があります。また、itemLabel は、True/False ビット データ タイプである「CollectionHomePage」と呼ばれる DB 内の列を選択しています。私は単純なものが欠けているに違いありません...あなたのアイデアをありがとう。

4

1 に答える 1

1

ItemCreatedevent は各データリストアイテムに対して実行されますが、グローバルではないため、各アイテムに対して同じコードを実行していますが、これはあなたのケースでは間違っていると思います.

作成された現在のアイテムのみを確認する必要があります。また、作成されたアイテムでは、データはまだアイテムにバインドされていないため、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;
        }
    }
}
于 2010-05-29T18:50:26.657 に答える