クリック可能なニュースの見出しのリストを出力したい。これまでのところ、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>
列の種類をBoundColumnからHyperlink列に変更する必要があります。
<asp:hyperlinkfield headertext="NewsHeadline"
datatextfield="NewsHeadline"
datanavigateurlfield="NewsURL"
datanavigateurlformatstring="http://{0}" />
この変更に加えて、ニュース記事へのリンクを作成するために使用できるURLまたは何かを選択していることを確認する必要があります。上記の例では、URLはSQLソースから取得できるものと想定しています。 IDの場合は、URLの残りを次のように入力するだけです... "〜/ MyNewsPage.aspx?NewsID = {0}" ...
代わりに hyperlinkfield を使用してください:
<asp:hyperlinkfield datatextfield="NewsHeadline"
datanavigateurlfields="NewsID"
datanavigateurlformatstring="~\newsdetails.aspx?Id={0}" />
次のように、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>
このようなものは、Visual Studio 2010のソリューションとして素晴らしい働きをします。
GridView
を作成します。GridView
の上にマウスを置いて、右上に表示される矢印をクリックします。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>
これで準備は完了です。これにより、すべてのヘッドラインのリストが、NewsHeadlineテーブルの各NewsHeadline
エントリに対応するnewsdetails.aspx
PRIMARY KEY
を使用して作成したクエリ文字列のNews_Id
ページ補完に動的に生成される一意のリンクを持つハイパーリンクとして作成されます。
次に、newsdetails.aspx
ページをロードするときに、Request.QueryString["News_Id"]
を使用してURLからNews_Id
の値を取得し、それを使用して、クリックされた特定のNewsHeadline
の詳細をデータベースに照会します。その後、そのクエリの結果をWebページに表示できます。
他の人が指摘したように、HyperLinkFieldはうまく機能します。ただし、行全体をクリックできるようにする場合は、SO post "グリッド全体で行全体をクリックできるようにする"で提案されているGridViewを実装するカスタムサーバーコントロールを使用できます。 。
私が投稿した質問をチェックしてください C#カスタムサーバーコントロールを実装する方法 の実装について。
ちょうど別のオプション。