找回密码
 立即注册

QQ登录

只需一步,快速开始

正指针

注册会员

7

主题

19

帖子

54

积分

注册会员

积分
54
正指针
注册会员   /  发表于:2021-7-30 10:27  /   查看:6783  /  回复:12
500金币
下面代码实现得效果如图:
1627611910(1).png230610961.png

有两个问题,
1.如果数据源中有两个 list 对象,我只想让一个list 对象作为子表显示,另一个不显示。如果和设置.
2.如何批量设置子表中得列头和绑定得列?GetChildView现在只能一行一行得设置。


   List<Student> a = new List<Student>();

            for (int i = 0; i < 5; i++)
            {
                List<Marks> b = new List<Marks>();
                for (int j = 0; j < 3; j++)
                {
                    b.Add(new Marks() { Subject = "Subject i=" + i.ToString() + "  j=" + j.ToString() });
                }
                a.Add(new Student() { StudentID = i, Name = i.ToString(), Performance = b });
            }

            spdDspQuery1.ActiveSheet.DataAutoSizeColumns = false;
            spdDspQuery1.ActiveSheet.DataAutoCellTypes = false;
            spdDspQuery1.ActiveSheet.AutoGenerateColumns = true;
            spdDspQuery1.ActiveSheet.DataAutoHeadings = false;

            spdDspQuery1.ActiveSheet.DataSource = a;
            spdDspQuery1.ActiveSheet.Columns.Count = 2;
            spdDspQuery1.ActiveSheet.Columns[0].DataField = "StudentID";
            spdDspQuery1.ActiveSheet.ColumnHeader.Cells[0, 0].Value = "编号";
            spdDspQuery1.ActiveSheet.Columns[1].DataField = "Name";
            spdDspQuery1.ActiveSheet.ColumnHeader.Cells[0, 1].Value = "名字";


            //创建的子表单。
            spdDspQuery1.ActiveSheet.SetChildVisible(spdDspQuery1.ActiveSheet, true);
            spdDspQuery1.ActiveSheet.GetChildView(0, 0).Columns.Count = 1;
            spdDspQuery1.ActiveSheet.GetChildView(0, 0).Columns[0].DataField = "Subject";
            spdDspQuery1.ActiveSheet.GetChildView(0, 0).ColumnHeader.Cells[0, 0].Value = "科目";

12 个回复

正序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-8-3 11:35:30
13#
不客气
回复 使用道具 举报
正指针
注册会员   /  发表于:2021-8-3 10:34:11
12#
Richard.Ma 发表于 2021-8-3 10:31
应该是产品本身的bug,可以换一个思路来隐藏第二个子表,代码如下

谢谢,解决了
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-8-3 10:31:07
11#
应该是产品本身的bug,可以换一个思路来隐藏第二个子表,代码如下
  1.         private void SpdDspQuery1_ChildViewCreated(object sender, ChildViewCreatedEventArgs e)
  2.         {
  3.             if ((e.SheetView.DataSource as List<Marks>).FirstOrDefault().Subject.Contains("Subject2"))
  4.             {
  5.                 e.SheetView.SetRowHeight(-1,0);
  6.                 e.SheetView.ColumnHeader.Visible = false;
  7.             }
  8.             else
  9.             {
  10.                 e.SheetView.Columns[1].Label = "科目";
  11.             }

  12.         }
复制代码
回复 使用道具 举报
正指针
注册会员   /  发表于:2021-8-3 09:33:57
10#
1627954417(1).png386235045.png 1627954417(1).png816973266.png

WindowsFormsApp3.zip

15.63 MB, 下载次数: 805

回复 使用道具 举报
正指针
注册会员   /  发表于:2021-8-3 09:10:11
9#
Richard.Ma 发表于 2021-7-30 10:27
以上两个问题都可以通过ChildViewCreated事件,参考下面的代码

这种方式隐藏后,如果打开子表,再点击按钮查询绑定值得地方会报错。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-8-2 09:29:42
8#
目前没有办法,

只能是对sheet绑定一个数据源,控件会分析数据源中的主子表关系,或数据对象列表的结构,来显示主子视图

对子表格的操作,很多都可以通过ChildViewCreated事件来完成
回复 使用道具 举报
正指针
注册会员   /  发表于:2021-7-31 11:33:37
7#
Richard.Ma 发表于 2021-7-30 18:10
以上两个问题都可以通过ChildViewCreated事件,参考下面的代码

不能像主表那样绑定数据吗?
回复 使用道具 举报
正指针
注册会员   /  发表于:2021-7-30 15:29:46
5#
附件再这里

WindowsFormsApp3.zip

15.63 MB, 下载次数: 790

回复 使用道具 举报
正指针
注册会员   /  发表于:2021-7-30 15:16:43
4#
Richard.Ma 发表于 2021-7-30 11:26
问题已收到,您提到的“数据源中有两个 list 对象”是什么意思,请直接发一个demo上来说明,我来帮您验证
...

类似与这种
model  形成的数据集


class Student
        {
            public int StudentID { get; set; }
            public string Name { get; set; }
            public List<Marks> Performance { get; set; }
            public List<Marks> Performance 2{ get; set; }
        }
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-30 11:26:50
3#
本帖最后由 Richard.Ma 于 2021-7-30 11:55 编辑

问题已收到,您提到的“数据源中有两个 list 对象”是什么意思,请直接发一个demo上来说明,我来帮您验证
关于多层数据的绑定和显示,开发包中有对应的示例可以参考,

image.png822381286.png
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部