Добавление столбца ссылки в ASP.NET GridView
Я хочу вывести список заголовков новостей, которые можно щелкнуть. Пока я могу распечатать список заголовков, потому что я перетащил таблицу NewsHeadline в представлении конструктора в VS 2010. Как вы думаете, я должен сделать элементы списка доступными? Я искал атрибут URL, но я не видел его. Нужно ли обертывать в < a href?
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource1"
EmptyDataText="There are no data records to display.">
<Columns>
<asp:BoundField DataField="NewsHeadline" HeaderText="NewsHeadline"
SortExpression="NewsHeadline" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>"
ProviderName="<%$ ConnectionStrings:ConnectionString1.ProviderName %>"
SelectCommand="SELECT [NewsHeadline] FROM [NewsTable]"></asp:SqlDataSource>
</form>
Ответы
Ответ 1
Вам нужно изменить тип столбца с BoundColumn на столбец Hyperlink.
<asp:hyperlinkfield headertext="NewsHeadline"
datatextfield="NewsHeadline"
datanavigateurlfield="NewsURL"
datanavigateurlformatstring="http://{0}" />
Помимо внесения этого изменения, вам нужно убедиться, что вы выбираете URL-адрес или что-то, что вы можете использовать, чтобы создать ссылку на новостную статью. В приведенном выше примере я предполагаю, что URL-адрес - это то, что вы можете захватить из своего источника SQL. Если это идентификатор, просто введите остальную часть URL-адреса, как это... "~/MyNewsPage.aspx? NewsID = {0}"...
Ответ 2
Используйте hyperlinkfield вместо:
<asp:hyperlinkfield datatextfield="NewsHeadline"
datanavigateurlfields="NewsID"
datanavigateurlformatstring="~\newsdetails.aspx?Id={0}" />
Ответ 3
Вам нужно использовать поле гиперссылки вместо BoundField, например:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource1"
EmptyDataText="There are no data records to display.">
<Columns>
<asp:HyperLinkField HeaderText="NewsHeadline" SortExpression="NewsHeadline" DataTextField="NewsHeadline" NavigateUrl="..." />
</Columns>
Ответ 4
Что-то вроде этого будет прекрасно работать как решение в Visual Studio 2010.
- Создайте
GridView
на вкладке "Дизайнер" вашей веб-страницы в VS.
- Наведите указатель мыши на
GridView
и щелкните стрелку, которая отображается в правом верхнем углу.
- Перейдите в раздел "Выбор источника данных" и выберите "новый источник данных..."
- Создайте строку подключения в своей базе данных и выберите таблицу NewsHeadline.
- Напишите запрос
SELECT News_Id, NewsHeadline FROM NewsHeadline
- Завершите настройку. Теперь на вкладке "Источник" должен быть создан код. Это также создаст
SqlDataSource
, который теперь является DataSource
вашего GridView
.
- Перейдите к тому, где код для вашего
GridView
на вкладке "Источник" и замените следующим кодом.
код:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="Id" DataSourceID="SqlDataSource1">
<Columns>
<asp:HyperLinkField
DataNavigateUrlFields="News_Id"
DataNavigateUrlFormatString="~\newsdetails.aspx?News_Id={0}"
DataTextField="NewsHeadline"
HeaderText="News HeadLines"
SortExpression="NewsHeadline" />
</Columns>
</asp:GridView>
И вы все настроены. Это создаст список всех заголовков в виде гиперссылок с динамически созданной уникальной ссылкой на страницы newsdetails.aspx
, которые мы построили с помощью PRIMARY KEY
News_Id
, соответствующей каждой записи NewsHeadline
в таблице NewsHeadline.
Затем, когда вы загружаете страницу newsdetails.aspx
, вы используете: Request.QueryString["News_Id"]
, чтобы получить значение News_Id
из URL-адреса и использовать его для запроса базы данных для получения подробной информации о конкретном NewsHeadline
, который был нажат. Затем вы можете отобразить результат этого запроса на веб-странице.
Ответ 5
HyperLinkField будет работать отлично, как указали другие. Но, если вы хотите, чтобы вся строка была нажата, вы можете использовать настраиваемый серверный элемент управления, который реализует GridView, предложенный в сообщении SO "Создание целой строки, кликабельной в gridview" .
Посмотрите вопрос, который я разместил на как реализовать собственный серверный контроль С# при его реализации.
Еще один вариант.