Привязка GridView к массиву строк. Проблема с HyperLinkField

Я знаю, что вы можете использовать восклицательный знак для привязки массива простых типов (например, строки) к 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 ответ

Решение

Большинство людей, вероятно, даже не знают, чтобы использовать ! поле я подозреваю. Когда я прочитал ваш вопрос, это на самом деле заставило меня вспомнить ту функцию, о которой я читал, но на самом деле никогда не использовал. Имея это в виду, я не думаю, что есть способ с этим типом поля, потому что он, вероятно, был забыт в реализации 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();

Это не заменяет ! напрямую, но это простое решение обойти привязку к простым массивам, которые всегда будут работать, даже когда ! не реализовано, что, вероятно, должно быть для каждого типа поля.

Другие вопросы по тегам