Подтвердить что ты не робот

Добавление столбца ссылки в 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>
4b9b3361

Ответ 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" .

Посмотрите вопрос, который я разместил на как реализовать собственный серверный контроль С# при его реализации.

Еще один вариант.