这可能是一个非常奇怪的问题,因为通常人们只将复杂类型绑定到gridview。但是我需要绑定一个Int的列表(对于字符串也是如此)。 通常,由于绑定的属性使用对象属性的名称,但在使用Int或String时,该值恰好是对象本身,而不是属性。
获取对象价值的“名称”是什么?我试过“价值”,“”(空),“这个”,“项目”,但没有运气。
我指的是网络表单中的gridview。
更新
有一个相关的Stack Overflow问题, How to bind a List to a GridView 。
答案 0 :(得分:9)
<BoundField DataField="!" />
可以解决问题(因为BoundField.ThisExpression
等于“!”)。
答案 1 :(得分:4)
<asp:TemplateField>
<ItemTemplate>
<%# Container.DataItem.ToString() %>
</ItemTemplate>
</asp:TemplateField>
答案 2 :(得分:3)
我希望您可能必须将数据放入包装类中 - 例如:
public class Wrapper<T> {
public T Value {get;set;}
public Wrapper() {}
public Wrapper(T value) {Value = value;}
}
然后绑定到List<Wrapper<T>>
代替(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); } );
答案 3 :(得分:2)
这与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;
答案 4 :(得分:-1)
如果必须编写要呈现的属性名称,则必须使用返回值的属性将整数(或字符串)值封装在类中。在网格中,您只需要编写<%# Eval("PropertyName") %>
。