2009-06-03 70 views
11

我试图绑定一个ASP.NET GridView控制到string数组,我得到以下项目:绑定一个ASP.NET GridView控件到字符串数组

字段或属性的名称 在选定的 数据源中未找到“商品”。

什么是正确的值,我应该使用DataField属性的asp:BoundField列在我的GridView控件。下面是我的源代码:

ASPX页面

<asp:GridView ID="MyGridView" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField DataField="Item" /> 
     <asp:CommandField ButtonType="Link" ShowSelectButton="true" SelectText="Click Me!" /> 
    </Columns> 
</asp:GridView> 

代码背后:

string[] MyArray = new string[1]; 
MyArray[0] = "My Value"; 
MyGridView.DataSource = MyArray; 
MyGridView.DataBind(); 

UPDATE

我需要有AutoGenerateColumns属性设置为false,因为我需要生成额外的asp:CommandField列。我已经更新了我的代码示例,以反映这种情况下

回答

8

一种方法是通过其与类一个单一的,命名的领域。这样,你可以给它一个名字。

public class GridRecord 
{ 
    public string MyValue { get; set; } 
} 

那么你的字符串数组转换为类的列表

string[] MyArray = new string[1]; 
MyArray[0] = "My Value"; 
List<GridRecord> MyList = (
    from ar in myArray 
    select new GridRecord 
    { 
     MyValue = ar 
    }).ToList(); 
MyGridView.DataSource = MyList; 
MyGridView.DataBind(); 

现在,你能说出你的数据字段属性

<asp:GridView ID="MyGridView" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField DataField="MyValue" /> 
    </Columns> 
</asp:GridView> 
+0

谢谢,我喜欢这个解决方案使用LINQ。 – 2009-06-03 16:58:56

+0

我怎么能在这里使用类似上面的东西:http://stackoverflow.com/questions/34209825/how-结合使用多列表和使用as-a-gridview-datasource Thanks。 – Si8 2015-12-10 19:15:09

12

尝试用一个TemplateField更换绑定列像这样:

<asp:TemplateField HeaderText="String Value"> 
     <ItemTemplate> 
      <%# Container.DataItem %> 
     </ItemTemplate> 
    </asp:TemplateField> 

顺便说一句,我举起这个从another question

+0

谢谢。由于某种原因,我永远不会记得Container.DataItem语法:( – 2010-04-13 21:06:07

1

迈克尔,

的代码

<asp:BoundField DataField="Item" /> 

需要一个名称为“Item”的列,如果您将其绑定到DataSource控件之一(如SqlDataSource,ObjectDataSource或LinqDataSource),则该列将具有该列。既然你绑定了一个IEnumerable,你就没有这个名字。

+0

谢谢,好点!我现在更新了代码以使用正确的名称 – 2009-06-03 16:59:33

20

搜索后几个小时,我终于发现有这种情况下的特殊数据字段:“

<asp:GridView ID="MyGridView" runat="server" AutoGenerateColumns="false"> 
<Columns> 
    <asp:BoundField DataField="!" /> 
</Columns> 
</asp:GridView> 

我希望这会帮助别人1天:)

3

这里是一个使用旧的DataGrid的完整示例...所以它看起来“!”把戏有广泛的实施。这在VS2008中的ASP.NET下工作。当然,只需要使用正确的元素名称就可以使用GridView。

<%@ Page 
    Language="C#" 
    AutoEventWireup="true" 
    CodeBehind="Default.aspx.cs" 
    Inherits="WebApplication2._Default" 
%> 
<%@Import 
    Namespace="System.Collections.Generic" 
%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 

    <script type="text/C#" runat="server"> 
     void initList() 
     {   
     List<String> myList = new List<String>(); 
     myList.Add("Hello"); 
     myList.Add("Chatting"); 
     myList.Add("Goodbye"); 
     Grid1.DataSource = myList; 
     Grid1.DataBind(); 
     } 
    </script>  
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <%initList(); %> 
     <asp:DataGrid runat="server" ID="Grid1" AutoGenerateColumns="false"> 
      <Columns> 
       <asp:BoundColumn DataField="!" DataFormatString="Data: {0}" HeaderText="Dyad"/> 
      </Columns> 
     </asp:DataGrid> 
    </form> 
</body> 
</html> 

因此,作为一个GridView内段将

<asp:GridView runat="server" ID="Grid1" AutoGenerateColumns="false"> 
     <Columns> 
      <asp:BoundField DataField="!" DataFormatString="Data: {0}" HeaderText="Dyad"/> 
     </Columns> 
    </asp:GridView> 

如果您来回切换,注意VS2008(至少)不能在Designer.cs类重新申报控件类型,所以如果只编辑元素名称,你必须手动更改它。