2009-08-18 75 views
0

我有一个Asp.Net GridView。其中一列是一个列表,但我只想显示列表中的最后一个项目。我怎样才能做到这一点?Asp.Net Gridview - 一列是列表<string> - 只显示最后一个项目

List<string> Column1 

我绑定GridView的业务对象:

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

编辑

这个工作,但它是最好的解决办法:

<%# ((List<string>)Eval("Column1"))[((List<string>)Eval("Column1")).Count - 1] %> 
+0

你是如何结合这GridView的? 你可以给grdiview显示一些标记吗? – cptScarlet 2009-08-18 18:02:47

回答

4

我将一个属性添加到您绑定到该对象,并使用该属性,而不是在你的绑定列表属性。

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(); 
+0

不是那么可行...对象是一个业务对象,我不想将业务对象添加到演示属性 – Martin 2009-08-18 18:12:33

+0

然后,您可以创建一个GridObjectView类,将它包装起来以便准备要在视图上显示的对象。 – NerdFury 2009-08-18 18:13:46

+0

这是我目前拥有的更好的解决方案吗?如果是,为什么? (不是d * ck,只是想学习) – Martin 2009-08-18 18:17:49

-1

你最好的打赌是创建一个模板列并使用内联脚本进行回退从列表中删除值:

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

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

希望帮助

+0

没有工作,请参阅编辑问题。 – Martin 2009-08-18 18:10:04

+0

对不起,正确的想法,忘了减1 ...看起来像你认为我们虽然:) – LorenVS 2009-08-18 19:31:21

+0

和DataBinder.Eval需要2或3参数,= =应该# – Martin 2009-08-19 12:53:39

相关问题