找回密码
 立即注册

QQ登录

只需一步,快速开始

ZenosZeng 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-9-21 14:02  /   查看:5968  /  回复:2
在某些情况下我们会将Spread中某一列的单元格类型设置为 超链接(HyperLinkCellType ),并指定相应的 URL 地址(如: http://gcdn.grapecity.com ),然后会给 Spread 绑定数据源。

此时,我们会发现 HyperLinkCellType  所在的列,每个单元格的超链接地址都是指向同一个链接地址,有时候我们希望每个单元格的 URL 是不一样的,比如每个单元格 URL 中会带一个参数(如:http://gcdn.grapecity.com?id = 100),类似这样的需求我们可以通过自定义的 HyperLinkCellType  类型来实现我们的需求,代码如下:
  • C#
  1.     [Serializable]
  2.     public class MyHyperLinkCellType : FarPoint.Web.Spread.HyperLinkCellType
  3.     {
  4.         public override Control PaintCell(string id, TableCell parent, FarPoint.Web.Spread.Appearance style, FarPoint.Web.Spread.Inset margin, object value, bool upperLevel)
  5.         {
  6.             if (value != null)
  7.             {
  8.                 HyperLink hl = base.PaintCell(id, parent, style, margin, value, upperLevel) as HyperLink;
  9.                 hl.Target = Target;
  10.                 hl.NavigateUrl = NavigateUrl + "?id=" + value.ToString();
  11.                
  12.                 return hl;

  13.             }
  14.             else {
  15.                 return base.PaintCell(id, parent, style, margin, value, upperLevel);
  16.             }
  17.         }
  18.     }
复制代码


  • VB.NET

  1. <Serializable> _
  2. Public Class MyHyperLinkCellType
  3.         Inherits FarPoint.Web.Spread.HyperLinkCellType
  4.         Public Overrides Function PaintCell(id As String, parent As TableCell, style As FarPoint.Web.Spread.Appearance, margin As FarPoint.Web.Spread.Inset, value As Object, upperLevel As Boolean) As Control
  5.                 If value IsNot Nothing Then
  6.                         Dim hl As HyperLink = TryCast(MyBase.PaintCell(id, parent, style, margin, value, upperLevel), HyperLink)
  7.                         hl.Target = Target
  8.                         hl.NavigateUrl = NavigateUrl &amp; "?id=" &amp; value.ToString()


  9.                         Return hl
  10.                 Else
  11.                         Return MyBase.PaintCell(id, parent, style, margin, value, upperLevel)
  12.                 End If
  13.         End Function
  14. End Class
复制代码

使用自定义的 MyHyperLinkCellType  类型:
  1.     protected void Page_Load(object sender, EventArgs e)
  2.     {
  3.         if (IsPostBack)
  4.         {
  5.             return;
  6.         }

  7.         MyHyperLinkCellType hlct = new MyHyperLinkCellType();
  8.         hlct.NavigateUrl = "http://gcdn.grapecity.com/index.aspx";
  9.         hlct.Target = "blank";

  10.         hlct.ShowEllipsis = true;
  11.         FpSpread1.ActiveSheetView.Columns[1].CellType = hlct;

  12.         DataTable dt = new DataTable();

  13.         dt.Columns.Add("Col1");
  14.         dt.Columns.Add("Col2");
  15.         dt.Columns.Add("Col3");

  16.         dt.Rows.Add(1, 1, 3);
  17.         dt.Rows.Add(1, 2, 3);
  18.         dt.Rows.Add(1, 3, 3);
  19.         dt.Rows.Add(1, 4, 3);
  20.         dt.Rows.Add(1, 5, 3);

  21.         FpSpread1.ActiveSheetView.DataAutoCellTypes = false;
  22.         FpSpread1.ActiveSheetView.DataSource = dt;
  23.             
  24.     }
复制代码


通过以上方法,我们就可以动态设置每个单元格的 URL 地址
28.png

评分

参与人数 1满意度 +5 收起 理由
jd6061 + 5

查看全部评分

2 个回复

倒序浏览
ex_zhangp4
注册会员   /  发表于:2021-2-23 13:50:44
沙发
如何在一个单元格中实现多个超链接
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-23 14:04:04
板凳
我看到你在winforms板块也发了帖子,已经按照winforms开发包给你回复了答案。

你目前用的到底是哪个开发平台,请确认。否则没有办法给你准确的答案
后续发帖也请在对应的开发平台板块发帖
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部