gridview与arraylist没有显示数据

时间:2012-05-14 01:12:43

标签: c# asp.net data-binding

我有一个gridview,我使用来自powershell命令的值填充。例如,我的powershell命令是get-command。我知道该命令返回值。这是我的代码,但我的gridview从不显示数据。

ArrayList boxesarray = new ArrayList();

foreach (PSObject ps in commandResults)
    boxesarray.Add(ps.Properties["Name"].Value.ToString());

boxes.DataSource = boxesarray;
boxes.DataBind();

我知道价值在那里,因为我用标签替换了最后两行,并且能够看到价值。

boxlabel.text = boxesarray[4];

我一定错过了什么。请帮助。

2 个答案:

答案 0 :(得分:1)

GridView需要具有属性的集合或IEnumerable类,并且属性将映射到列。

像你这样的数组有值类型对象(字符串),它们没有特性,所以你不能将属性绑定到列。

ArrayList boxesarray = new ArrayList();

您可以创建一个这样的简单类:

public class PropertyContainer
{
    public string Value {get;set;}
}
// NOTE: you can override ToString(); to customize String.Format behaviour
// and to show it in the debugger (althought there's other way for this, using
// DebuggerDisplayAttribute)

创建并填充此类的数组,该数组将正确绑定到数据网格。

foreach (PSObject ps in commandResults)
    boxesarray.Add(
       new PropertyContainer { Value = ps.Properties["Name"].Value.ToString()});

boxes.DataSource = boxesarray;
boxes.DataBind();

其他选项是使用LINQ将数组转换为对象数组。如果将数据网格列设置为自动创建,您甚至可以使用匿名对象。

// anonymous type
var dataForBinding = boxesArray.select(val => new {Value = val});

// array of the class
var dataForBinding = boxesArray.select(val => new PropertyContainer
   { Value = val });

您可以将此数据绑定到gridview,它将完美运行。

答案 1 :(得分:0)

你可以尝试

.DataSource = (from ps in commandResults 
               select { Name:ps.Properties["Name"].Value.ToString() }).ToList();

或者

.DataSource = (from name in yourarraylist
               select { Name:name.ToString() }).ToList();