Установите CssClass на метку внутри повторителя, в шаблоне Col в GridView - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть повторитель внутри элемента управления Grid View (Telerik).

<telerik:GridTemplateColumn FilterControlAltText="Filter TemplateColumn column" HeaderText="<%$ resources: PARTNER_LIST_GRID_CATEGORY %>" UniqueName="TemplateColumn">
    <HeaderStyle CssClass="myGridHeader" />
    <ItemTemplate>
        <asp:Repeater runat="server" ID="dlPartnerCat" OnItemDataBound="dlPartnerCat_OnItemDataBound">
            <ItemTemplate>
                <asp:Label runat="server" ID="lblPartCat" CssClass="k-margin-l-10-desktop" Text='<%#Eval("BusinessPartnerCategoryName")%>' />
            </ItemTemplate>
            <%--  <AlternatingItemTemplate>
                <asp:Label runat="server" ID="lblPartCat" CssClass="k-margin-l-10-desktop" Text='<%#Eval("BusinessPartnerCategoryName")%>' />
            </AlternatingItemTemplate>--%>
        </asp:Repeater>
    </ItemTemplate>
</telerik:GridTemplateColumn>

Я связываю данные с ним следующим образом:

void BindPartners()
{
    var _partners = new BusinessPartnerRepo().GetAll(CompanyHelper.GetCompId()).Where(i => i.IsActive == true);
    var _p = new TD.Data.Entity.BusinessPartner();

    gvPartnerList.DataSource = _partners;
    gvPartnerList.Rebind();

    foreach (GridDataItem _dataItem in gvPartnerList.Items)
    {
        var _selectedItem = _dataItem.ItemIndex;
        var _list = _dataItem.MuchBetterFindControl<Repeater>("dlPartnerCat");
        var _id = (int)_dataItem.OwnerTableView.DataKeyValues[_selectedItem]["BusinessPartnerId"];

        if (_id > 0)
        {
            _p = _partners.FirstOrDefault(i => i.BusinessPartnerId == _id);

            if (_list != null)
            {
                _list.DataSource = _p.BusinessPartnerCategories.OrderBy(n => n.BusinessPartnerCategoryName);
                _list.DataBind();
            }
        }
    }
}

все это прекрасно работает,Но я хочу применить класс Css к метке внутри повторителя.Это прекрасно работало с одним значением (как я делаю с Status), и оно даже разветвляется на первое значение в повторителе.

protected void dlPartnerCat_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    foreach (GridDataItem _item in gvPartnerList.Items)
    {
        var _list = _item.MuchBetterFindControl<Repeater>("dlPartnerCat");

        foreach (RepeaterItem _ite in _list.Items)
        {
            var _partCatlbl = _ite.MuchBetterFindControl<Label>("lblPartCat");

            if (_partCatlbl != null)
            {
                switch (_partCatlbl.Text)
                {
                    case "Customer":
                        _partCatlbl.CssClass = ApplicationCssHelper.CustomerClass;
                        break;
                    case "Customer - Supplier":
                        _partCatlbl.CssClass = ApplicationCssHelper.Customer_SupplierClass;
                        break;
                    case "Supplier":
                        _partCatlbl.CssClass = ApplicationCssHelper.SupplierClass;
                        break;
                    case "Agent":
                        _partCatlbl.CssClass = ApplicationCssHelper.AgentClass;
                        break;
                    default:
                        _partCatlbl.CssClass = ApplicationCssHelper.WarningClass;
                        break;
                }
            }
        }

    }
}

значение в повторителе может быть кратным, и я хочу установить другоекласс, основанный на значении (текст) для метки в повторителе

How it is now

есть идеи кто-нибудь ??

Хорошо, я решил это ... хотя бы частично

Я изменил метод OnDataBound для ретранслятора:

protected void dlPartnerCat_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        foreach (GridDataItem _item in gvPartnerList.Items)
        {
            var _list = _item.MuchBetterFindControl<Repeater>("dlPartnerCat");

            foreach (RepeaterItem _ite in _list.Items)
            {
                var _partCatlbl = _ite.MuchBetterFindControl<Label>("lblPartCat");

                if (_partCatlbl != null)
                {
                    switch (_partCatlbl.Text)
                    {
                        case "Customer":
                            _partCatlbl.CssClass = ApplicationCssHelper.CustomerClass;
                            break;
                        case "Customer - Supplier":
                            _partCatlbl.CssClass = ApplicationCssHelper.Customer_SupplierClass;
                            break;
                        case "Supplier":
                            _partCatlbl.CssClass = ApplicationCssHelper.SupplierClass;
                            break;
                        case "Agent":
                            _partCatlbl.CssClass = ApplicationCssHelper.AgentClass;
                            break;
                        default:
                            _partCatlbl.CssClass = ApplicationCssHelper.WarningClass;
                            break;
                    }
                }
            }

        }
    }

и результат следующий:

enter image description here

как вы видите, все классы имеют примененный класс css, кроме последнего ... кто-нибудь знает почему?

1 Ответ

0 голосов
/ 24 февраля 2019

Я думаю, вам нужно удалить обе foreach петли.Нет необходимости, и это только добавляет дополнительные накладные расходы.

protected void dlPartnerCat_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    var _partCatlbl = e.Item.FindControl("lblPartCat") as Label

    if (_partCatlbl != null)
    {
        switch (_partCatlbl.Text)
        {
            case "Customer":
                _partCatlbl.CssClass = ApplicationCssHelper.CustomerClass;
                break;
            case "Customer - Supplier":
                _partCatlbl.CssClass = ApplicationCssHelper.Customer_SupplierClass;
                break;
            case "Supplier":
                _partCatlbl.CssClass = ApplicationCssHelper.SupplierClass;
                break;
            case "Agent":
                _partCatlbl.CssClass = ApplicationCssHelper.AgentClass;
                break;
            default:
                _partCatlbl.CssClass = ApplicationCssHelper.WarningClass;
                break;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...