我有一个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];
我一定错过了什么。请帮助。
答案 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();