Добавление столбца ссылок в ASP.NET GridView - PullRequest
19 голосов
/ 05 декабря 2009

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

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

Ответы [ 5 ]

30 голосов
/ 05 декабря 2009

Вам необходимо изменить тип столбца с BoundColumn на столбец с гиперссылкой.

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

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

9 голосов
/ 05 декабря 2009

Используйте поле гиперссылки вместо:

<asp:hyperlinkfield datatextfield="NewsHeadline"
        datanavigateurlfields="NewsID"
        datanavigateurlformatstring="~\newsdetails.aspx?Id={0}"  />
3 голосов
/ 17 апреля 2013

Примерно так будет отлично работать в качестве решения в Visual Studio 2010.

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

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

3 голосов
/ 05 декабря 2009

Вам нужно использовать поле гиперссылки вместо 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>

2 голосов
/ 05 декабря 2009

HyperLinkField будет отлично работать, как отмечали другие. Но, если вы хотите, чтобы вся строка была интерактивной, вы можете использовать пользовательский серверный элемент управления, который реализует GridView, предложенный в сообщении SO «Создание всей строки активируемой в представлении сетки» .

Ознакомьтесь с вопросом, который я написал на , как реализовать пользовательский серверный элемент управления C # при его реализации.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...