将GridView绑定到字符串数组。 HyperLinkField问题

时间:2010-08-19 00:03:05

标签: asp.net data-binding

我知道您可以使用感叹号将简单类型的数组(如字符串)绑定到GridView,就像这样

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
       <asp:BoundField HeaderText="Array Field" DataField="!" />
    </Columns>    
</asp:GridView>

但DataNavigateUrlFields

似乎并非如此
<asp:HyperLinkField DataNavigateUrlFields="!" DataNavigateUrlFormatString="RoleInformation.aspx?role={0}" Text="Manage users" />

我收到以下错误:

  

名称为“!”的字段或媒体资源未在所选数据源中找到。

1 个答案:

答案 0 :(得分:3)

大多数人可能都不知道使用我怀疑的!字段。当我读到你的问题时,它实际上让我记住了我读过但从未真正使用过的功能。考虑到这一点,我认为这种类型的字段没有办法,因为它可能在HyperLinkField实现中被遗忘(只是猜测)。您可以快速转换为命名属性,然后您就没有任何问题:

示例:

<asp:GridView ID="grdTest" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
        <asp:BoundField HeaderText="Array Field" DataField="data" />
        <asp:HyperLinkField DataNavigateUrlFields="data" DataNavigateUrlFormatString="RoleInformation.aspx?role={0}" Text="Manage users" /> 
    </Columns>     
</asp:GridView>

注意名为data的字段。然后绑定你的数组就行:

string[] testArray = { "1", "2", "3" };
grdTest.DataSource = testArray.Select(a => new { data = a });
grdTest.DataBind();

它不直接替换!,但它是一个简单的解决方案,可以绕过简单的数组,即使!没有实现它也可能需要对于每种字段类型。