找回密码
 立即注册

QQ登录

只需一步,快速开始

summonyyq

银牌会员

22

主题

69

帖子

3765

积分

银牌会员

积分
3765

活字格认证

summonyyq
银牌会员   /  发表于:2014-9-3 18:26  /   查看:10283  /  回复:10
现在有个用户自定义控件(三个文本框做成的用户控件),想要在spread中显示,怎么绑定啊。
其celltype都是spread预先定义好的类型,求告知能否实现。

10 个回复

倒序浏览
summonyyq
银牌会员   /  发表于:2014-9-3 21:46:00
沙发
求高手指点
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-9-4 12:01:00
板凳
回复 使用道具 举报
summonyyq
银牌会员   /  发表于:2014-9-4 17:46:00
地板
回复 3楼iceman的帖子

您给的例子还是不符合我的要求。
我的用户控件(日本的年历)是以下组成的
下拉列表(年号)+文本框(年)+文本框(月)+文本框(日)+图片按钮(日历控件)

例子中其实都是继承了一种spread控件
能实现我这种要求吗?
回复 使用道具 举报
summonyyq
银牌会员   /  发表于:2014-9-4 19:24:00
5#
回复 3楼iceman的帖子

根据给的例子,确实能出来那个样子了,我重新继承了个TextCellType ,代码如下:
[Serializable]
    public class CTextCellType : FarPoint.Web.Spread.TextCellType
    {

        // 重写单元格绘制过程
        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链接页面的访问参数
                TableCell cell0 = new TableCell();
                cell0.BorderStyle = BorderStyle.None;
                DropDownList ddl = new DropDownList();
                ddl.Items.Add(new ListItem("平成", "H"));
                ddl.Items.Add(new ListItem("昭和", "S"));
                ddl.Items.Add(new ListItem("大正", "T"));
                ddl.Items.Add(new ListItem("明治", "M"));
                ddl.Width = 50;
                //ddl.ID = "ddlNengo";
                cell0.Controls.Add(ddl);
                row.Cells.Add(cell0);

                TableCell cell1 = new TableCell();
                cell1.BorderStyle = BorderStyle.None;
                TextBox txt1 = new TextBox();
                //txt1.ID = "txtYear";
                txt1.Width = 50;
                cell1.Controls.Add(txt1);
                row.Cells.Add(cell1);

                TableCell cell2 = new TableCell();
                cell2.BorderStyle = BorderStyle.None;
                cell2.Text = "年";
                row.Cells.Add(cell2);

                TableCell cell3 = new TableCell();
                cell3.BorderStyle = BorderStyle.None;
                TextBox txt2 = new TextBox();
                //txt2.ID = "txtMonth";
                txt2.Width = 50;
                cell3.Controls.Add(txt2);
                row.Cells.Add(cell3);

                TableCell cell4 = new TableCell();
                cell4.BorderStyle = BorderStyle.None;
                cell4.Text = "月";
                row.Cells.Add(cell4);

                TableCell cell5 = new TableCell();
                cell5.BorderStyle = BorderStyle.None;
                TextBox txt3 = new TextBox();
                //txt3.ID = "txtDay";
                txt3.Width = 50;
                cell5.Controls.Add(txt3);
                row.Cells.Add(cell5);

                TableCell cell6 = new TableCell();
                cell6.BorderStyle = BorderStyle.None;
                cell6.Text = "日";
                row.Cells.Add(cell6);

                TableCell cell7 = new TableCell();
                cell7.BorderStyle = BorderStyle.None;
                HyperLink link7 = new HyperLink();
                link7.ImageUrl = "/Images/Detail.png";
                cell7.Controls.Add(link7);
                row.Cells.Add(cell7);

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

运行后确实能显示出来,但第一次点击单元格,会出现html代码,如下图:
1.jpg (56.97 KB, 下载次数: 492)
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-9-5 18:30:00
6#
回复 5楼summonyyq的帖子

这个问题需要通过使用 htc 文件解决,.HTC 文件是配合CellType完成客户端操作,你可以查看帮助文档中的【Formatting Percent Value on the Client 】章节,该章节有详细的代码和操作流程。
回复 使用道具 举报
summonyyq
银牌会员   /  发表于:2014-9-11 19:39:00
7#
回复 6楼iceman的帖子

我参照了下面的方法来实现,可以加载上自定义控件了。
但不知道前后台该怎么取值了?
请版主帮忙看下,就用博客中的例子可以。
http://blog.gcpowertools.com.cn/ ... E%A7%E4%BB%B6-.aspx
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-9-12 17:38:00
8#
回复 7楼summonyyq的帖子

好的,问题我们已经查收,正在调查中稍后反馈给你。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-9-16 16:17:00
9#
回复 7楼summonyyq的帖子

您好,

问题已经确定,一个单元格中只能添加一个可编辑的控件作为 Editor,无法添加多个控件或者是非编辑类控件。

5# 的这个 case 建议您通过多列单元格来模拟,合并列头并且隐藏边框可以模拟出多个编辑器在一列的效果。
谢谢
回复 使用道具 举报
summonyyq
银牌会员   /  发表于:2014-11-4 14:23:00
10#
回复 9楼iceman的帖子

不好意思,把帖子又翻出来了。
还是需要实现在spread中绑定自定义控件(日本日历控件),看到也有些绑定自定义控件的帖子,但就是没有怎么取值赋值的说明,能否重写下cell.value的方法?

如果按照斑竹建议合并多列来实现,因为有点击弹出日历div的操作,不知道有没有spread.net自带的日历控件。
请斑竹多费心看看。

下图是绑定自定义控件后的效果:
34f147733f10403087a8e6eb33ea1913.jpg (30.67 KB, 下载次数: 506)
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部