1

我有一个 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];

我肯定错过了什么。请帮忙。

4

2 回答 2

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,它将完美地工作。

于 2012-05-14T01:29:11.827 回答
0

你可以试试

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

或者

.DataSource = (from name in yourarraylist
               select { Name:name.ToString() }).ToList();
于 2012-05-14T01:28:01.757 回答