web-dev-qa-db-ja.com

ASP.NET GridViewへのリンク列の追加

クリック可能なニュースの見出しのリストを出力したい。これまでのところ、VS 2010のデザイナービューでNewsHeadlineテーブルをドラッグアンドドロップしたので、見出しのリストを印刷できます。リスト要素をクリック可能にするにはどうすればよいと思いますか? 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>
22
astronought

列の種類をBoundColumnからHyperlink列に変更する必要があります。

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

この変更に加えて、ニュース記事へのリンクを作成するために使用できるURLまたは何かを選択していることを確認する必要があります。上記の例では、URLはSQLソースから取得できるものと想定しています。 IDの場合は、URLの残りを次のように入力するだけです... "〜/ MyNewsPage.aspx?NewsID = {0}" ...

33
RSolberg

代わりに hyperlinkfield を使用してください:

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

次のように、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>
3
Scott Kirkland

このようなものは、Visual Studio 2010のソリューションとして素晴らしい働きをします。

  1. VSのWebページの[デザイナー]タブでGridViewを作成します。
  2. GridViewの上にマウスを置いて、右上に表示される矢印をクリックします。
  3. [データソースの選択]に移動し、[新しいデータソース...]を選択します
  4. データベースへの接続文字列を作成し、NewsHeadlineテーブルを選択します。
  5. クエリSELECT News_Id, NewsHeadline FROM NewsHeadlineを記述します
  6. セットアップを終了します。これで、[ソース]タブにコードが生成されます。これにより、SqlDataSourceも作成され、これがDataSourceGridViewになります。
  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>

これで準備は完了です。これにより、すべてのヘッドラインのリストが、NewsHeadlineテーブルの各NewsHeadlineエントリに対応するnewsdetails.aspxPRIMARY KEYを使用して作成したクエリ文字列のNews_Idページ補完に動的に生成される一意のリンクを持つハイパーリンクとして作成されます。

次に、newsdetails.aspxページをロードするときに、Request.QueryString["News_Id"]を使用してURLからNews_Idの値を取得し、それを使用して、クリックされた特定のNewsHeadlineの詳細をデータベースに照会します。その後、そのクエリの結果をWebページに表示できます。

3
Derek W

他の人が指摘したように、HyperLinkFieldはうまく機能します。ただし、行全体をクリックできるようにする場合は、SO post "グリッド全体で行全体をクリックできるようにする"で提案されているGridViewを実装するカスタムサーバーコントロールを使用できます。

私が投稿した質問をチェックしてください C#カスタムサーバーコントロールを実装する方法 の実装について。

ちょうど別のオプション。

2
Eddie