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

C# 在datagrid视图控件的当前单元格中添加按钮控件,c#,winforms,visual-studio-2010,C#,Winforms,Visual Studio 2010,我想在Datagridview的当前单元格中添加一个自定义控件(按钮) 控制我已经创建了自定义控件(按钮)。我的要求是当我 单击Datagridview的任何单元格,该控件应显示在该单元格上。 这是这个的屏幕截图 请帮我克服这个问题。谢谢你的帮助 注意:-此按钮不是下拉按钮。它只是一个带有下拉图像的简单按钮。单击此按钮将打开一个弹出窗口。您只需要一个按钮,将其父项设置为您的DataGridView,并根据当前单元格边界更新其位置。这应该在CellPaint事件处理程序中完成,如下所示: But

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

请帮我克服这个问题。谢谢你的帮助


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

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

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
事件处理程序(用于两个网格)应该仅使用
按钮执行操作,这两个网格都会受到这个代码的影响。

Shanx@ SONER编辑我的问题现在看起来好多了。如果这个按钮应该打开一个下拉,用户可以选择一个值,你应该考虑。没有这个按钮是一个普通的按钮,上面有下拉的图像,它会打开弹出窗口。你说的是什么意思?“当我单击Datagridview的任何单元格时,该控件应显示在该单元格上。“。将此按钮添加到添加到数据网格中的每一行。@etaiso:他的意思肯定是弹出窗口应该像按钮下的下拉菜单一样显示。hi@King King,您已经解决了我的问题。Thanx非常感谢您的帮助。我们可以为两个网格添加此按钮吗。实际上,我有两个平行网格,其中一个滚动条作为分隔符。(Grid1-ScrollBar-Grid2)。这看起来像是在网格上。因此,我们可以对两个网格执行相同的操作。@TikamSangwani你是说每个网格都有自己的按钮(因此我们需要两个按钮)还是都使用相同的按钮?我的要求是两个网格使用相同的按钮。@TikamSangwani看到我的更新,你需要为两个网格注册
CellPaint
事件处理程序。