我在网格视图控件(Telerik)中有一个Repeater。
<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;
}
}
}
}
}
转发器中的值可以是多个,我想根据转发器中标签的值(文本)设置不同的类
任何想法任何人?
好的,我已经解决了这个问题......至少部分解决了
我改变了转发器的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;
}
}
}
}
}
结果如下:
正如你可以看到所有元素都应用了css类,除了最后一个...任何人都知道为什么?
我认为你需要删除两个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;
}
}
}