您的位置:首页 > 数据库

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

2015-06-26 20:01 531 查看
「注意!请勿私自转载!」



  最近在使用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


最后显示结果大概如下:

 链接 SPIDSPName 
 查看详情 1AAA 
 查看详情 2BBB 
如果想把链接列放到最后一列或者改变字段的显示名字,改用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就会根据不同的商品编号来显示相应的商品信息。效果大概如下:

 编号名称 价格 简介 商品图片 
 1AAA ¥1 XXXXX 图片1 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息