找回密码
 立即注册

QQ登录

只需一步,快速开始

s004600

注册会员

2

主题

10

帖子

22

积分

注册会员

积分
22
最新发帖
s004600
注册会员   /  发表于:2019-3-13 11:18  /   查看:3944  /  回复:8
我用的是 c1 的 flexgird 控件 , 现在想往其单元格里添加自定义控件, 添加和滚动条拖拽后的效果都ok , 都实现了, 但是 目前的问题是:我的自定义控件的高加入大于 grid的高,然后 往下拖滚动条,此时,添加的自定义控件被挤压逐渐缩小,而不是向下显示余下内容,这样导致大于grid高的底下内容永远也看不到。所以 遇到这样问题该如何解决呢? 我尝试添加普通textbox等常规控件也是如此,我看c1 的自带 demo也是一样的现象。 求助!!! 万分感谢!

8 个回复

倒序浏览
s004600
注册会员   /  发表于:2019-3-13 13:03:14
沙发
没有人吗
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-3-13 15:20:50
板凳
最好您可以把已有的这个程序或者一个demo项目压缩后发我,我确认您是怎样添加的。以便可以更快的解决
回复 使用道具 举报
s004600
注册会员   /  发表于:2019-3-13 16:07:56
地板
class HostedControl
    {
        public C1FlexGrid _flex;
        //public Control _ctl;
        public VEdit _ctl;
        public Row _row;
        public Column _col;

        public HostedControl(C1FlexGrid flex, VEdit hosted, int row, int col)
        {
            _flex = flex;
            _ctl = hosted;
            _row = flex.Rows[row];
            _col = flex.Cols[col];

            // ホストされたコントロールをグリッドに追加します。
            _flex.Controls.Add(_ctl);
        }
      
        public bool UpdatePosition(int rr)
        {
            //行および列のインデックスを取得します。
            int r = _row.Index;
            int c = _col.Index;
            if (r < 0 || c < 0) return false;

            // セルの位置を取得します。
            Rectangle rc = _flex.GetCellRect(r, c, false);


            // セルに収まらない場合コントロールを非表示します。
            if (rc.Width <= 0 || rc.Height <= 0 || !rc.IntersectsWith(_flex.ClientRectangle))
            {
                _ctl.Visible = false;
               
                return true;
            }

            // コントロールを表示します。      

            _ctl.Bounds = rc;   

            _ctl.Visible = true;

            
            return true;
        }



        private void GroupingMateriaList_Paint(object sender, PaintEventArgs e)
        {
         
            foreach (HostedControl hosted in _al)
                hosted.UpdatePosition();
        }

ArrayList _al;
_al.Add(new HostedControl(GroupingMateriaList, ve, row, 2));

项目不太方便弄, 代码都是常规的添加方式。 另外 今早我也用过 editor的添加方式, 也是一样。 你可以用我这个试着 弄个test程序 就知道了。 另外,c1 的demo 也是一样的 我等会找下 demo程序看看能否发给你
回复 使用道具 举报
s004600
注册会员   /  发表于:2019-3-13 16:11:53
5#
这个是c1 的 demo 一个道理。 你拖动滚动条往下拉 就会发现,上面的控件是被压缩状态。   因为控件会时刻获取row的位置大小 重新赋上去,所以是被挤压状态,显示不了底下的值。 所以,这种问题还有什么办法解决呢?谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
s004600
注册会员   /  发表于:2019-3-14 13:37:53
6#
哎 没人问津
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-3-14 14:30:40
7#

我按照您提供的demo,一直在测试

这个目前看起来没有比较完美的解决方法,因为实际上这个只是模拟放在单元格的位置

垂直滚动的位置可以自_flex.ScrollPosition.Y这个值来获取,然后根据这个再调整ctl 的位置,滚动后实现效果如下,可以解决您的问题,但是其实滚动后会叠加到上方,这个其实也不好看

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
s004600
注册会员   /  发表于:2019-3-14 15:00:07
8#
Richard.Ma 发表于 2019-3-14 14:30
我按照您提供的demo,一直在测试

这个目前看起来没有比较完美的解决方法,因为实际上这个只是模拟放在 ...

嗯。。。 这个我也试过 都飞上去 肯定不行。 哎 我打算重新做一个大的自定义控件了 。 没想到c1产品居然没想到这个问题,应该很常见的啊。。。  可能一直没遇到大量数据的情况 。 哎 绝望ing  谢谢回复老哥!
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-3-14 15:21:52
9#
s004600 发表于 2019-3-14 15:00
嗯。。。 这个我也试过 都飞上去 肯定不行。 哎 我打算重新做一个大的自定义控件了 。 没想到c1产品居然 ...

不客气,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部