【问题标题】:How to bind a List<Int> to a gridview?如何将 List<Int> 绑定到 gridview?
【发布时间】:2010-10-05 15:41:14
【问题描述】:

这可能是一个很奇怪的问题,因为通常人们只将复杂类型绑定到网格视图。但我需要绑定一个 Int 列表(字符串也是如此)。 通常,由于要绑定的属性使用对象的属性名称,但使用 Int 或 String 时,值正是对象本身,而不是属性。

获取对象值的“名称”是什么?我尝试了“Value”、“”(空)、“this”、“item”,但没有成功。

我指的是网络表单中的网格视图。

更新

有一个相关的 Stack Overflow 问题,How to bind a List to a GridView

【问题讨论】:

    标签: c# asp.net list gridview


    【解决方案1】:

    我希望您可能必须将数据放入包装类中 - 例如:

    public class Wrapper<T> {
        public T Value {get;set;}
        public Wrapper() {}
        public Wrapper(T value) {Value = value;}
    }
    

    然后改为绑定到List&lt;Wrapper&lt;T&gt;&gt;(如Value) - 例如使用类似(C# 3.0)的东西:

    var wrapped = ints.ConvertAll(
                i => new Wrapper<int>(i));
    

    或 C# 2.0:

    List<Wrapper<int>> wrapped = ints.ConvertAll<Wrapper<int>>(
        delegate(int i) { return new Wrapper<int>(i); } );
    

    【讨论】:

    • 这是我的第一种方法,但我记得有一次我使用特定名称来获取值。我想我必须深入研究反射器:)
    • 在我看来是一个相当复杂的解决方案。查看我的答案以获得相同想法的更简单版本。
    【解决方案2】:
    <asp:TemplateField>
       <ItemTemplate>
           <%# Container.DataItem.ToString() %>
       </ItemTemplate>
    </asp:TemplateField>
    

    【讨论】:

    • 使用GridView,在使用绑定列时,只需指定名称即可。这适用于转发器或自定义列
    • 你能用一个模板字段吗
    • 实际上容器将不起作用您必须获取 这是获取 DataItem 的未记录方法
    • 除了@Andrey Shchekin 提供的最简单的解决方案之外,当结果显示值比值更多时,这很有用,例如包含该值的链接或文本。
    【解决方案3】:

    如果必须编写要呈现的属性名称,则必须将整数(或字符串)值封装在具有返回值的属性的类中。在网格中你只需要写&lt;%# Eval("PropertyName") %&gt;

    【讨论】:

    • 但是 Int 没有 PropertyName :)
    • 是的,但是你必须创建一个这样的类: class MyInt { public int myValue; public int MyValue { get{ return myValue; } } }
    【解决方案4】:

    这与 Marc 的想法基本相同,但更简单。

    它创建一个匿名包装类,您可以将其用作网格的数据源,然后将列绑定到“Value”成员:

    List<int> list = new List<int> { 1,2,3,4};
    var wrapped = (from i in list select new { Value = i }).ToArray();
    grid.DataSource = wrapped;
    

    【讨论】:

    • 至少适合单向绑定。
    【解决方案5】:

    &lt;BoundField DataField="!" /&gt; 可以解决问题(因为BoundField.ThisExpression 等于“!”)。

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多