找回密码
 立即注册

QQ登录

只需一步,快速开始

suifei

初级会员

2

主题

6

帖子

402

积分

初级会员

积分
402

活字格认证

最新发帖
suifei
初级会员   /  发表于:2014-10-17 00:42  /   查看:5311  /  回复:3
winforms 程序,目前我想实现的效果是,当选中 父表的时候,子表全部选中,最后根据 子表带出相应的数据,当我全消子表里面的记录的时候,同时把相应的关联也取消掉,问题是 展开父子表的时候,不选择父表只选择子表时,怎么得到子表值?

代码如下:
StringBuilder stringBuilder = new StringBuilder();
        private void fpSpread1_ButtonClicked(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e)
        {
            FarPoint.Win.Spread.SheetView sv;
                sv = fpSpread1.ActiveSheet.GetChildView(fpSpread1.ActiveSheet.ActiveRowIndex, 0);

            if (fpSpread1.Sheets[0].Cells[fpSpread1.ActiveSheet.ActiveRowIndex, 0].Text == "True")
            {
                for (int i = 0; i < sv.Rows.Count; i++)
                {
                    if (sv.Cells[i, 0].Value.ToString() == "True")
                        stringBuilder.Append((stringBuilder.Length == 0) ? ("'" + sv.Cells[i, 13].Value + "'") :
                                              (",'" + sv.Cells[i, 13].Value + "'"));
                    else
                        stringBuilder.Replace(sv.Cells[i, 13].Value.ToString(), "");
                }
            }
            else
            {
                for (int i = 0; i < sv.Rows.Count; i++)
                {
                    if (sv.Cells[i, 0].Value.ToString() == "True")
                        stringBuilder.Append((stringBuilder.Length == 0) ? ("'" + sv.Cells[sv.ActiveRowIndex, 13].Value + "'") :
                                                        (",'" + sv.Cells[sv.ActiveRowIndex, 13].Value + "'"));
                    else
                    {
                        //sv.Cells[i, 0].Value = "False";
                        stringBuilder.Replace(sv.Cells[i, 13].Value.ToString(), "");
                    }
                }
            }
            //if (sv.Cells[sv.ActiveRowIndex, 0].Value == "False")
            //    stringBuilder.Replace(sv.Cells[sv.ActiveRowIndex, 13].Value.ToString(), "");
            //else
            //    stringBuilder.Append((stringBuilder.Length == 0) ? ("'" + sv.Cells[sv.ActiveRowIndex, 13].Value + "'") :
            //                                             (",'" + sv.Cells[sv.ActiveRowIndex, 13].Value + "'"));


            stringBuilder = stringBuilder.Replace(",,", ",").Replace("'',", "");
            if (stringBuilder.Length > 0)
            {
                string text = " and d.autoid in (@id) ";
                text = text.Replace("@id", stringBuilder.ToString());
                this.getDetailInfo(text, this.GridViews, this.strDetailTitle);
            }
            else
            {
                string text = " and 1=2 ";
                this.getDetailInfo(text, this.GridViews, this.strDetailTitle);
            }
        }

QQ截图20141017004051.jpg

148.44 KB, 下载次数: 304

3 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-10-17 18:43:00
沙发
回复 1楼suifei的帖子

Spread 可以通过 ChildViewCreated 事件抓取首次展开子表单的行为,通过参数 e.SheetView 获取表单单元格。
回复 使用道具 举报
suifei
初级会员   /  发表于:2014-10-17 21:33:00
板凳
如果是展开一条的话是没有问题,如果展开多个的话,怎么办?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-10-20 19:14:00
地板
回复 3楼suifei的帖子

请问展开多个指的是什么?我尝试设置了多级级联同样通过 FpSpread1_ChildViewCreated 可以捕捉到。

或者是我没能理解你的意思。请详细解释下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部