Изменить цвет ссылки кнопки внутри списка данных на ItemDatabound - PullRequest
0 голосов
/ 15 апреля 2020

Привет! Я пытаюсь изменить базовую цветовую кнопку ссылки в зависимости от сети, copychimp, replicator и дискового пространства. Я пробовал это:

protected void dgrMachines_ItemDataBound(object sender, DataListItemEventArgs e)
{
    string copychimp = Convert.ToString(DataBinder.Eval(e.Item.DataItem, "copychimp"));
    string network = Convert.ToString(DataBinder.Eval(e.Item.DataItem, "network_isconnected"));
    string drive = Convert.ToString(DataBinder.Eval(e.Item.DataItem, "drive_alert"));
    string replicator = Convert.ToString(DataBinder.Eval(e.Item.DataItem, "replicator_isactive"));

    if (network == "0" || copychimp == "Disconnected" || drive == "1" || replicator == "0")
    {
        e.Item.ForeColor = System.Drawing.Color.Red;  
    }
    else
    {
        e.Item.ForeColor = System.Drawing.Color.Green;  
    }
}

не повезло

но когда я пытаюсь пользователь изменить e.Item.ForeColor = System.Drawing.Color.Green; на е. Item. e.Item.BackColor = System.Drawing.Color.Green;
это работает. Вот мой html:

<asp:DataList ID="dgrMachines" runat="server" RepeatColumns="5" OnSelectedIndexChanged="dgrMachines_SelectedIndexChanged" OnItemCommand="dgrMachines_ItemCommand" CellPadding="3" CssClass="col-12" OnItemDataBound="dgrMachines_ItemDataBound">
    <HeaderTemplate>
        <div class="container col-12" style="background-color: #333333">
            <b>
                <h2 class="text-center" style="color: white">Machines List</h2>
            </b>

        </div>

    </HeaderTemplate>
    <ItemTemplate>
        <asp:LinkButton ID="lblMachine" Text='<%# Eval("machine") %>' runat="server" Font-Size="Medium" ForeColor="Black"></asp:LinkButton>
       <%-- <asp:label ID="lblcopychimp" runat="server" Text='<%# Eval("copychimp") %>' />
        <asp:label ID="lblNetwork" runat="server" Text='<%# Eval("network_isconnected") %>' />
        <asp:label ID="lblreplicator" runat="server" Text='<%# Eval("replicator_isactive") %>' />
         <asp:label ID="lbldrive" runat="server"  Text='<%# Eval("drive_alert") %>' />--%>

        <%--   <%#Eval("machine")%> --%>
    </ItemTemplate>
</asp:DataList>

Кто-нибудь поможет мне с этим?

1 Ответ

1 голос
/ 15 апреля 2020

Вам необходимо использовать FindControl:

Используйте FindControl для доступа к элементу управления из функции на странице с выделенным кодом, чтобы получить доступ к элементу управления, находящемуся внутри другого контейнер, или в других обстоятельствах, когда целевой элемент управления не доступен напрямую для вызывающей стороны. Этот метод найдет элемент управления, только если этот элемент управления непосредственно содержится в указанном контейнере; то есть метод не выполняет поиск во всей иерархии элементов управления внутри элементов управления.

Так должно быть так:

LinkButton machineButton = (e.Item.FindControl("lblMachine") as LinkButton);
if (machineButton != null)
{
    machineButton.ForeColor = System.Drawing.Color.Red;
}

вместо:

e.Item.ForeColor = System.Drawing.Color.Red;
...