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