DevExpress SpreadsheetControl 分组

实现效果:点击单元格,该单元格下方临近的分组收缩或展开。由于DevExpress SpreadsheetControl控件本身的Bug,被点击的单元格上方不能紧邻另外一个分组,否则也会被展开。

原理:利用SpreadsheetCommandId.HideDetail或SpreadsheetCommandId.ShowDetail,展开时必须先选中分组上方单元格或行,收缩时必须选中分组包含的单元格或行。

代码:

        using DevExpress.XtraSpreadsheet.Commands;

        Worksheet worksheet;
        private void Form1_Load(object sender, EventArgs e) {
            worksheet = spreadsheetControl1.ActiveWorksheet;
            worksheet.Rows.Group(2, 4, true);
            worksheet.Rows.Group(17, 20, true);
            worksheet.Rows.Group(27, 30, true);
            worksheet.Cells["A2"].SetValue("Expand");
            worksheet.Cells["A7"].SetValue("Expand");
            worksheet.Cells["A32"].SetValue("AAAAA");//这个必须有,目的配合后面的spreadsheetControl1.ActiveWorksheet.GetDataRange()
        }
        private void spreadsheetControl1_MouseClick(object sender, MouseEventArgs e) {
            Cell cell = spreadsheetControl1.GetCellFromPoint(e.Location);
            if(cell != null) {
                Row currentRow = worksheet.Rows[cell.TopRowIndex];
                if(currentRow.GroupLevel == 0) {
                    int bottomRowIndex = spreadsheetControl1.ActiveWorksheet.GetDataRange().BottomRowIndex;
                    Row childRow = null;
                    for (int i = cell.TopRowIndex + 1; i <= bottomRowIndex; i++)
                    {
                        if (spreadsheetControl1.ActiveWorksheet.Rows[i].GroupLevel != 0)
                        {
                            childRow = spreadsheetControl1.ActiveWorksheet.Rows[i];
                            break;
                        }
                    }
                    if(childRow != null) {

                        if(childRow.Visible) {
                            worksheet.SelectedCell = childRow[0];
                            SpreadsheetCommand command = spreadsheetControl1.CreateCommand(SpreadsheetCommandId.HideDetail);
                            command.Execute();
                            cell.SetValue("Expand");
                            worksheet.SelectedCell = cell;
                        }
                        else {
                            worksheet.SelectedCell = spreadsheetControl1.ActiveWorksheet.Rows[childRow .TopRowIndex- 1][0];
                            SpreadsheetCommand command = spreadsheetControl1.CreateCommand(SpreadsheetCommandId.ShowDetail);
                            command.Execute();
                            cell.SetValue("Collapse");
                        }
                    }

                }
            }
       }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值