我创建了自定义列(DataGridViewButtonControlColumn)和单元格(ButtonControlCell)类来保存System.Windows.Forms.Button控件。按钮将添加到列中并正确显示。 在我将按钮设置为ButtonControlCell的值之前,我附加了一个“Click”的事件处理程序。但是单击按钮时不会调用此处理程序。
我在重写的Paint函数中将按钮添加到DataGridView的控件中。
使用DataGridView注册Button时是否需要遵循任何特定步骤?
代码:
public class ButtonControlCell : DataGridViewTextBoxCell
{
.
.
.
protected override void Paint(System.Drawing.Graphics graphics, System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
{
base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);
if (btnVal != null)
{
btnVal.Size = new System.Drawing.Size(80, 20);
btnVal.Location = cellBounds.Location;
this.DataGridView.Controls.Add(btnVal);
}
}
.
.
.
protected override void OnMouseClick(DataGridViewCellMouseEventArgs e)
{
// This is not called when the button is clicked (which is correct I guess)
base.OnMouseClick(e);
if (btnVal != null)
{
btnVal.PerformClick();
}
}
.
.
}
在实施中:
private void AddButtonCell(string sText, EventHandler oEh, DataGridViewButtonColumn oClm, DataGridView dgvParent, int iRow, int iColumn)
{
Button btnTemp = new Button();
btnTemp.Height = 20;
btnTemp.Width = 60;
btnTemp.Anchor = AnchorStyles.Top;
btnTemp.Text = sText;
btnTemp.Click += new EventHandler(btnTemp_Click);
btnTemp.Tag = new Point(iRow, iColumn);
Controls.Add(btnTemp);
dgvParent.Rows[iRow].Cells[iColumn].Value = btnTemp;
}
void btnTemp_Click(object sender, EventArgs e)
{
Button btnSender = (Button)sender;
DataGridViewRow r = dgvResults.Rows[((Point)btnSender.Tag).X];
TagInfo oRet = new TagInfo((string)r.Cells[iTitleColIndex].Value, (string)r.Cells[iArtistColIndex].Value,
(string)r.Cells[iAlbumColIndex].Value);
oRet.imgAlbumArt = (System.Drawing.Image)r.Cells[iArtColIndex].Tag;
oParent.TagWithInfo(oRet, true);
}
答案 0 :(得分:0)
如果你的目标只是让用户点击一个按钮就可以使用内置的DataGridViewButtonColumn(DataGridViewButtonColumn)。
答案 1 :(得分:0)
用于实现此目的的方法是捕获在DataGrid上执行的事件(例如,按钮单击),获取控件并根据该任务执行任何其他任务。 通过浏览自定义DataGridView的几个教程找到答案。