VS WinForm 中 父Datagridview嵌套子DatagridView

最近项目中应用到 在一个主Datagridview嵌套另一个子DatagridView.
效果如下:
在这里插入图片描述
在这里插入图片描述

实现的思路: 在父 Datagridview 点击的当前行的下方,显示子Datagridview.

  //Step 1
        private void Form_Load(object sender, EventArgs e)
        {
            //dgv : Master grid
            //dataGridView1: Detail grid            
            dgv.Controls.Add(dataGridView1);
            dataGridView1.Visible = false;
        }

        //Step 2
        // text the rowheader of char '+' for each row in datagrid event: RowsAdded
        private void dgv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            dgv.Rows[e.RowIndex].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft;
            dgv.Rows[e.RowIndex].HeaderCell.Value = "+";
        }

        //Step 3
        // set the position of the detail (sub) datagridview showing
        private void dgv_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {           
            dgv.CurrentRow.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft;
            dgv.CurrentRow.HeaderCell.Value = Convert.ToString(dgv.CurrentRow.HeaderCell.Value).Trim() == "+" ? "-" : "+"; // switch text the rowheader of char '+' or  '-'

            int scrollRowIndex = dgv.FirstDisplayedScrollingRowIndex; // the first  row in the top of the  datagrid
            if ((e.RowIndex - scrollRowIndex) > 10) // if the current row is the tenth row in the current page, set it to the top of the datagrid 
            {
                dgv.FirstDisplayedScrollingRowIndex = e.RowIndex;
            }
            
                  //set the position of the detail (sub) datagridview"
                    System.Drawing.Rectangle rect = dgv.GetCellDisplayRectangle(-1, e.RowIndex  , false);
                    dataGridView1.Left = rect.Left;
                    dataGridView1.Top = rect.Bottom ;
                    dataGridView1.Width = dgv.Width ;
                    dataGridView1.Height = dgv.Height;
                    dataGridView1.Visible = Convert.ToString(dgv.CurrentRow.HeaderCell.Value).Trim() == "-" ? true : false; // show or hide the detail grid
        }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值