代码之家  ›  专栏  ›  技术社区  ›  Martin

Asp.Net Gridview-一列是List<string>-只显示最后一项吗

  •  0
  • Martin  · 技术社区  · 15 年前

    我有一个Asp.NETGridView。其中一列是列表,但我只想显示列表中的最后一项。我该怎么做?

    List<string> Column1
    

    我正在将Gridview绑定到业务对象:

    public Class GridObject
    {
        List<string> Column1 { get; set; }
    }
    

    这是可行的,但这是最好的解决方案吗:

    <%# ((List<string>)Eval("Column1"))[((List<string>)Eval("Column1")).Count - 1] %>
    
    2 回复  |  直到 15 年前
        1
  •  4
  •   NerdFury    15 年前

    我将向绑定到的对象添加一个属性,并在绑定中使用该属性而不是list属性。

    public Class GridObject
    {
        List<string> Column1 { get; set; }
        public string Column1LastValue
        { 
          get
          {   // return Column1.Last(); if linq is available
              return Column1[Column1.Count-1];
          }
        }
    }
    

    编辑:添加一个演示包装器允许您对将要显示的内容进行单元测试。您正在视图中进行转换,这是可以的,但是由于您在技术上将业务对象转换为适合显示的对象时有一些逻辑发生,因此您可能希望对该转换进行单元测试。然后,您希望应用于任何业务对象字段的任何格式都被包装在可测试类中,而不是隐藏在不稳定视图中。以下是如何做到这一点的示例:

    public class GridObjectView
    {
        private GridObject _gridObject;
    
        public GridObjectView(GridObject gridObject)
        {
            _gridObject = gridObject;
        }
    
        public string Column1
        {
            get
            {
                return _gridObject.Column1.Last();
            }
        }
    }
    

    List<GridObject> data = GetGridData();
    
    grid.DataSource = data.Select(g => new GridObjectView(g));
    grid.DataBind();
    
        2
  •  -1
  •   LorenVS    15 年前

    <%= ((List<string>)DataBinder.Eval("Column1"))[((List<string>)DataBinder.Eval("Column1")).Count] %>
    

    或者,您可以将结果存储在标签或文字的文本中。