Midnight Express

YOUNGER NOW THAN WE WERE BEFORE.

GridView实现超链接列和图片列,跳转页面并传递参数
「注意!请勿私自转载!」

  最近在使用ASP.NET建设网站,需要解决如标题所示的问题,上网可以搜出很多答案。现在简单总结一下我的解决办法,方便各位取用,有任何疑问欢迎提出交流。
(注:使用VB语言。)

※为表格添加一列超链接列,每一项都指向特定的页面。
  由于不能逐个设定链接的地址(而且数据项多时这么做也不科学;或者使用数据库进行逐个设定),因此使用参数传递便可以链接到指定的目标页面。接下来以商品展示的页面为例介绍实现方法。

在aspx页面的body中插入如下代码:
<form id="form1" runat="server">
  <div align="center">
   <asp:GridView ID="GridView1" runat="server" DataKeyNames="SPID" 
	CellPadding="5" width="70%">
	<Columns>
	 <asp:HyperLinkField DataNavigateUrlFields="SPID" 
	DataNavigateUrlFormatString="GoodsDetail.aspx?SPID={0}" 
	HeaderText="链接" Text="查看详情" />
	 <%--创建超链接列,指定要传递的参数的数据源字段,并添加在目标页面后。--%>
	</Columns>
   </asp:GridView>
   <asp:SqlDataSource ID="SqlDataSource1" runat="server" ></asp:SqlDataSource>
  </div>
</form>

如果要传递多个参数,则这样修改:
<asp:HyperLinkField DataNavigateUrlFields="SPID,SPName" 
DataNavigateUrlFormatString="GoodsDetail.aspx?SPID={0}&SPName={1}" 
HeaderText="链接" Text="查看详情" />   
<%--指定两个参数,{0}表示选择第一个参数--%>

在对应的vb文件里或者在<script runat="server"></script>里面写入以下代码:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
Handles Me.Load
	If Not IsPostBack Then
		Dim conn As New SqlConnection()
		Dim cmd As New SqlCommand()
		Dim objReader As SqlDataReader
		conn.ConnectionString = 
"Data Source =.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\GOODS.mdf;Integrated 
Security=True"  '数据库名称为GOODS
		conn.Open()
		cmd.Connection = conn
		cmd.CommandText = "Select SPID,SPName From SP"  
		‘使用SQL语句,显示SP表里SPID和SPName字段的所有记录
		objReader = cmd.ExecuteReader()
		GridView1.DataSource = objReader
		GridView1.DataBind()
		conn.Close()
	End If
End Sub

最后显示结果大概如下:
 链接  SPID SPName 
 查看详情  1 AAA 
 查看详情  2 BBB 
如果想把链接列放到最后一列或者改变字段的显示名字,改用Boundfield会很方便。(使用方法可看目标页面的设置)

※添加图片列。

目标页面的设置如下:
<form id="form1" runat="server">
  <div align="center">
	<asp:GridView ID="GridView1" runat="server" DataKeyNames="SPID"
 		CellPadding="5" AutoGenerateColumns="False">   
		<%--设置AutoGenerateColums可避免列重复出现--%>
		<Columns>
			<asp:BoundField DataField="SPID" HeaderText="编号" />
			<asp:BoundField DataField="SPName" HeaderText="名称" />
			<asp:BoundField DataField="Price" HeaderText="价格" 
				DataFormatString="{0:C}" />
			<asp:BoundField DataField="Brief" HeaderText="简介">
				<ItemStyle width="300" /> <%--设置此单元格的宽度--%>
			</asp:BoundField>
			<asp:ImageField DataImageUrlField="Image" HeaderText="商品图片">
				<ControlStyle Width="250" />  <%--设置图片的宽度--%>
			</asp:ImageField>
			</Columns>
	</asp:GridView>
	<asp:SqlDataSource ID="SqlDataSource1" runat="server"></asp:SqlDataSource>
  </div>
</form>

需要在数据库表里的Image字段里写好要显示的图片的相对路径,若在上级的另一文件夹中,则可这样写:/img/pic.jpg
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  If Not IsPostBack Then
	Dim conn As New SqlConnection()
	Dim cmd As New SqlCommand()
	Dim objReader As SqlDataReader
	conn.ConnectionString = "Data Source 	=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\GOODS.mdf;Integrated 	Security=True"
	conn.Open()
	cmd.Connection = conn
	cmd.CommandText = "Select SPID,SPName,Price,Brief,Image from SP Where SPID = @SPID"

	'在SQL语句里可以看出调用了传递过来的参数SPID
	Dim para As New SqlParameter("@SPID", SqlDbType.Int, 4) '设置参数
	cmd.Parameters.Add(para)
	cmd.Parameters("@SPID").Value = Request.QueryString("SPID").ToString() '获取参数
	objReader = cmd.ExecuteReader()
	GridView1.DataSource = objReader
	GridView1.DataBind()
	conn.Close()
  End If
End Sub

这样,在目标页面里,GridView就会根据不同的商品编号来显示相应的商品信息。效果大概如下:
 编号 名称  价格  简介  商品图片 
 1 AAA  ¥1  XXXXX  图片1 



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/christychan/article/details/46653605
个人分类: ASP.NET
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

GridView实现超链接列和图片列,跳转页面并传递参数

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭