自定义单元格类型实现任意数量的链接地址和图片

在应用系统开发过程中,我们经常会有这样的需求,在表格的首列或者最后一列中放置一些操作按钮,比如:删除、修改,查看详细数据等。Spread for ASP.NET本身提供了超链接单元格类型 HyperLinkCellType ,但是在应对以上需求时,我们可以扩展 HyperLinkCellType 单元格类型的行为。

发布于 2013/02/01 00:00

在应用系统开发过程中,我们经常会有这样的需求,在表格的首列或者最后一列中放置一些操作按钮,比如:删除、修改,查看详细数据等。Spread for ASP.NET本身提供了超链接单元格类型 HyperLinkCellType ,但是在应对以上需求时,我们可以扩展 HyperLinkCellType 单元格类型的行为。

首先,我们定义一个名为 Action 的类型,用于表示每一个操作,代码如下:

    /// 
    /// 操作类型
    /// 
    [Serializable]
    public class Action
    {
        public Action(string name, string url, string image)
        {
            this.Name = name;
            this.NavigateUrl = url;
            this.ImageUrl = image;
        }

        /// 
        /// 操作名称
        /// 
        public string Name
        { get; set; }

        /// 
        /// 链接地址
        /// 
        public string NavigateUrl
        { get; set; }

        /// 
        /// 图片地址
        /// 
        public string ImageUrl
        { get; set; }
    }

 

因为需要在自定义的单元格类型中使用,所以,我们给 Action 打上了 Serializable 属性。

接下来我们需要实现自定义的超链接单元格类型 CActionCellType,主要是重写 PaintCell 方法,并根据需要的操作类型返回相应的呈现结果,代码如下:

    [Serializable]
    public class CActionCellType : FarPoint.Web.Spread.HyperLinkCellType
    {
        /// 
        /// 制定是需要的操作
        /// 
        public List Actions = new List();

        // 重写单元格绘制过程
        public override Control PaintCell(string id, TableCell parent, FarPoint.Web.Spread.Appearance style, FarPoint.Web.Spread.Inset margin, object value, bool upperLevel)
        {
            if (value != null)
            {
                Table table = new Table();
                table.GridLines = GridLines.None;
                TableRow row = new TableRow();

                // 根据指定的操作绘制单元格的内容,并将单元格的Value链接页面的访问参数
                foreach (Action item in Actions)
                {                    
                    TableCell cell = new TableCell();
                    cell.BorderStyle = BorderStyle.None;

                    HyperLink link = new HyperLink();

                    link.ToolTip = item.Name;
                    link.NavigateUrl = string.Format(item.NavigateUrl, value);
                    link.ImageUrl = item.ImageUrl;                                       
                    
                    cell.Controls.Add(link);
                    row.Cells.Add(cell);
                }

                table.Rows.Add(row);
                return table;
            }
            else
            {
                return base.PaintCell(id, parent, style, margin, value, upperLevel);
            }
        }
    }

 

最后一步就是使用自定义的单元格类型,代码如下:

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                // 设置Spread控件的基本属性
                FpSpread1.ActiveSheetView.DataAutoCellTypes = false;
                FpSpread1.Columns[0].Width = 130;
                FpSpread1.Columns[1].Width = 300;
                FpSpread1.Columns[2].Width = 100;
                FpSpread1.Columns[3].Width = 100;

                // 创建一个拥有删除,编辑和查看功能的单元格
                CActionCellType action = new CActionCellType();
                action.Actions.Add(new Action("删除", "/Page1.aspx?id={0}", "/Images/Delete.png"));
                action.Actions.Add(new Action("编辑", "/Page2.aspx?id={0}", "/Images/Edit.png"));
                action.Actions.Add(new Action("详细", "/Page3.aspx?id={0}", "/Images/Detail.png"));
                FpSpread1.ActiveSheetView.Columns[0].CellType = action;


                // 绑定数据源
                System.Data.DataTable dt = new System.Data.DataTable();
                dt.Columns.Add("ID");
                dt.Columns.Add("名称");
                dt.Columns.Add("分类");
                dt.Columns.Add("单价");

                dt.Rows.Add(100001, "Spread .NET 表格控件 V6.0", "表格控件", "10000");
                dt.Rows.Add(100001, "ActionReports 报表控件 V7.0", "报表控件", "10000");
                dt.Rows.Add(100001, "ComponentOne 控件套包 2012V3", "控件套包", "10000");
                
                FpSpread1.DataSource = dt;

            }
        }

 

运行截图:

源码下载 VS2010 + Spread .NET 6.0 + C# :

7862_Link.zip (16.14 kb)

关于葡萄城

葡萄城是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的用户社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。

推荐相关案例
推荐相关资源
关注微信
葡萄城社区二维码

关注“葡萄城社区”

活字格低代码二维码

关注“活字格低代码”

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态