本文共 2090 字,大约阅读时间需要 6 分钟。
最近项目中应用到 在一个主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 }
转载地址:http://bimdi.baihongyu.com/