2009-12-04 4 views
17

Я хочу вывести список заголовков новостей, которые можно щелкнуть. Пока я могу распечатать список заголовков, потому что я перетащил таблицу NewsHeadline в представлении конструктора в VS 2010. Как вы думаете, я должен сделать элементы списка доступными? Я искал атрибут URL, но я не видел его. Нужно ли обертывать в < a href?Добавление столбца ссылки в ASP.NET GridView

<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> 

ответ

28

Вам необходимо изменить тип столбца с BoundColumn на столбец Hyperlink.

<asp:hyperlinkfield headertext="NewsHeadline" 
     datatextfield="NewsHeadline" 
     datanavigateurlfield="NewsURL" 
     datanavigateurlformatstring="http://{0}" /> 

Помимо внесения этих изменений, вам необходимо убедиться, что вы выбираете URL или что-то вы можете использовать, чтобы создать ссылку на статью новостей. В приведенном выше примере я предполагаю, что URL-адрес - это то, что вы можете захватить из своего источника SQL. Если это идентификатор, просто напечатайте остальную часть URL-адреса, как это ... »~/MyNewsPage.aspx? NewsID = {0}" ...

+2

Мне пришлось использовать DataNavigateUrlFields, это что-то .NET 4? –

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> 

9

Использование hyperlinkfield вместо:

<asp:hyperlinkfield datatextfield="NewsHeadline" 
     datanavigateurlfields="NewsID" 
     datanavigateurlformatstring="~\newsdetails.aspx?Id={0}" /> 
+0

Удобное решение .. – dincerm

2

HyperLinkField будет работать большой, как другие указали. Но если вы хотите, чтобы вся строка была нажата, вы можете использовать настраиваемый серверный элемент управления, который реализует GridView, предложенный в сообщении SO "Making an entire row clickable in a gridview".

Оформить вопрос, который я разместил на how to implement a C# custom server control по его реализации.

Просто еще один вариант.

3

Что-то, как это будет работать фантастически как решение в Visual Studio 2010.

  1. Создание GridView на вкладке Конструктор веб-страницы в VS.
  2. Наведите указатель мыши на GridView и щелкните по стрелке, которая отображается в правом верхнем углу.
  3. Перейдите к «Выбрать источник данных» и выберите «новый источник данных ...»
  4. Создайте строку подключения в своей базе данных и выберите таблицу NewsHeadline.
  5. написать письмо SELECT News_Id, NewsHeadline FROM NewsHeadline
  6. Завершить настройку. Теперь на вкладке «Источник» должен быть создан код. Это также создаст SqlDataSource, который теперь является DataSource вашего GridView.
  7. Перейдите, где код для вашего 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 KEYNews_Id, соответствующий каждой записи NewsHeadline в таблице NewsHeadline.

Тогда при загрузке newsdetails.aspx страницу, которую вы используете: Request.QueryString["News_Id"], чтобы получить значение News_Id из URL и использовать его для запросов к базе данных для получения подробной информации о конкретной NewsHeadline, что была нажата. Затем вы можете отобразить результат этого запроса на веб-странице.

Смежные вопросы