【问题标题】:Bound column to a list and loop...Is it possible at all?将列绑定到列表并循环...有可能吗?
【发布时间】:2012-01-04 14:45:02
【问题描述】:

我是 Telerik Grid 的新手,想知道是否有可能使用 Telerik Grid,这样我将一列绑定到字符串数组,然后以某种方式循环遍历它以将数组项显示为列表。

StoreViewModel:(一个商店可以有多个显示器)

public string Name { get; set; }

public string[] StoreDisplays { get; set; }

控制器:

private IQueryable<StoreViewModel> GetRetailers()
{
var stores = from sg in db.Store
select new RetailerViewModel
{ 
  Name = sg.sg_Name,
  Name = sg.sg_Name,
  StoreDisplays = (   from ca in db.Categories.Where(item => item.c_ParentId == null)
               join sd in db.StoreDisplays.Where(item => item.sd_StoreGroupId == sg.sg_Id)  

在 ca.c_Id 上等于 sd.sd_CategoryId 到 gj

               from subpet in gj.DefaultIfEmpty()
               select (ca.c_Name)).ToArray<string>()
};
return stores;
}

索引.aspx

<%= Html.Telerik().Grid<StoreLocatorBackOffice.Models.RetailerViewModel>(Model) <br/>
        .Name("Grid")
        .Columns(columns =>
        { 
            columns.Bound(sg => sg.Name)
            columns.Bound(sg => sg.StoreDisplays);
        }) 
        .DataBinding(dataBinding => dataBinding 
                .Ajax()
                    .Select("_Index", "Retailer", true)
        ) 
        .Scrollable(scrolling => scrolling.Enabled(false))
        .Sortable(sorting => sorting
            .OrderBy(sortOrder => sortOrder.Add(p => p.Name).Ascending())) 
        .Pageable(settings => settings.PageSize((int)ViewData["pageSize"])) 
        .Filterable(filtering => filtering.Enabled(true))
        .Footer(true)
        %> 

目前是这样显示的。

Name              Store Display
Store#1           Display#1Display#2Display#6
Store#2           Display#3Display#9

并想知道如何显示如下。

Name       Store Display
Store#1    Display#1
           Display#2
           Display#6

Store#2    Display#3
           Display#9

【问题讨论】:

    标签: ajax model-view-controller telerik-grid


    【解决方案1】:

    代替:

    columns.Bound(sg => sg.StoreDisplays);
    

    您应该使用模板进行绑定。该模板可以是任何你想要的,(甚至是另一个网格)。

    这是一个可以放入图片的模板:

    columns.Template(c => {
            %>
                <img 
                    alt="<%= c.CustomerID %>" 
                    src="<%= Url.Content("~/Content/Grid/Customers/" + c.CustomerID + ".jpg") %>" 
                  />
            <%
            });
    

    更改该模板以显示列表应该很简单。 更多信息请查看here。

    【讨论】:

    • 如何在模板内循环 for(public string[] StoreDisplays { get; set; })?
    【解决方案2】:

    我会使用 HTML 标签让数据垂直传播

    例如

    StoreDisplays = "    
    <ul>
        <li>Display#1</li>
        <li>Display#2</li>
        <li>Display#3</li>
    </ul>";  
    
    
    .Columns(columns =>
    {
        columns.Bound(o => o.StoreDisplays).ClientTemplate("<#= StoreDisplays #>");
    }
    

    【讨论】:

    • 不,不会。示例用法:columns.Bound(o => o.StoreDisplays).ClientTemplate("");
    • 但它仅在触发客户端模板时才有效......并且在最初加载时不会触发客户端模板。我实际上解决了它如下。 columns.Bound(sg => sg.StoreDisplays).Template(sg => string.Join("
    • ", sg.StoreDisplays.Split(',').OrderBy(o=>o.ToString()) )) .ClientTemplate("").Sortable(false);其中 listStoreDisplays 是在每个字符串元素上循环然后添加 ul 和 li 标签的 javascript 函数。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签