在datagrid视图控件的当前单元格中添加按钮控件

时间:2013-10-31 13:49:48

标签: c# winforms visual-studio-2010

我想在Datagridview的当前单元格中添加自定义控件(Button)     控制。我已经创建了自定义控件(Button)。我的要求就是我     单击Datagridview的任何单元格,此控件应显示在该单元格上。     这是屏幕截图。

enter image description here

请帮助我克服这个问题。任何帮助表示赞赏。

注意: - 此按钮不是下拉按钮。它只是一个带下拉图像的简单按钮。点击此按钮,将打开一个弹出窗口。

1 个答案:

答案 0 :(得分:2)

您只需要1个按钮,将其Parent设置为DataGridView并根据当前的单元格边界更新其位置。这应该在CellPainting事件处理程序中完成,如下所示:

Button button = new Button(){Width = 20, Height = 20};
int maxHeight = 20;
button.Parent = dataGridView1;//place this in your form constructor
//CellPainting event handler for both your grids
private void dataGridViews_CellPainting(object sender,
                                        DataGridViewCellPaintingEventArgs e) {
  DataGridView grid = sender as DataGridView;
  if (grid.CurrentCell.RowIndex == e.RowIndex &&
      grid.CurrentCell.ColumnIndex == e.ColumnIndex) {
     button.Top = e.CellBounds.Top - 2;
     button.Left = e.CellBounds.Right - button.Width;
     button.Height = Math.Min(e.CellBounds.Height, maxHeight);
     button.Invalidate();
  }
}
//Enter event handler for both your grids
private void dataGridViews_Enter(object sender, EventArgs e){
  button.Parent = (sender as Control);
}

注意:上面的CellPainting事件处理程序(用于两个网格)只应对button执行某些操作,如果添加其他代码(例如绘图),两个网格都将受到该代码的影响。