代码之家  ›  专栏  ›  技术社区  ›  Sergej Andrejev

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

  •  1
  • Sergej Andrejev  · 技术社区  · 14 年前

    我知道可以使用感叹号将简单类型的数组(如string)绑定到GridView,如下所示

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

    但DataNavigateEurlfields似乎并非如此

    <asp:HyperLinkField DataNavigateUrlFields="!" DataNavigateUrlFormatString="RoleInformation.aspx?role={0}" Text="Manage users" />
    

    我得到以下错误:

    名为“!”的字段或属性在所选数据源上找不到。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Kelsey    14 年前

    ! 我怀疑的领域。当我读到你的问题时,它实际上让我想起了我读过但从未真正使用过的那个功能。考虑到这一点,我不认为有办法处理这种类型的字段,因为它可能在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();
    

    它不能代替 ! 但这是一个简单的解决方案,可以绕过绑定到简单数组,即使 没有为每个字段类型实现它可能需要的。