.net WinForm用户控件开发--(2)带按钮DataGridView
这一节大家共同学习下自定义的datagridview, 这个datagridview的主要功能是可以使datagridview中的某些列包含按钮,单击按钮可以触发相应的事件。
我们先来看下效果图吧!
下面我们来说下实现步骤
1.创建自定义控件
创建一个自定义控件,添加新项---自定义控件
2.实现自定义datagridview控件
使刚创建的自定义控件继承datagridview,然后在自定义控件中拖放一个button按钮,然后在datagridview中的单元格获得焦点的时候,使当前单元格在当前单元格的右侧显示一个按钮.
代码如下:
[csharp]
public partial class DataGridViewButton : DataGridView
{
private Array _ShowButtonColumns; //有按钮的列名称
/// <summary>
/// 设置要显示按钮的列
/// </summary>
/// <param name="ShowButtonColumns"></param>
public void SetParam(Array ShowButtonColumns)
{
_ShowButtonColumns = ShowButtonColumns;
}
public DataGridViewButton()
{
InitializeComponent();
this.Controls.Add(button1);
}
/// <summary>
/// 数组中是否有与指定值相等的元素
/// </summary>
/// <param name="columnName"></param>
/// <param name="ShowButtonColumns"></param>
/// <returns></returns>
private bool IsShowButtonColumn(string columnName, Array ShowButtonColumns)
{
if (string.IsNullOrEmpty(columnName) || ShowButtonColumns == null || ShowButtonColumns.Length < 1) return false;
foreach (string astr in ShowButtonColumns)
if (astr == columnName) return true;
return false;
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}
private void DataGridViewButton_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if (IsShowButtonColumn(this.Columns[this.CurrentCell.ColumnIndex].Name, _ShowButtonColumns))
{
Point p = new Point();
if (this.button1.Height != this.Rows[this.CurrentCell.RowIndex].Height)
{
this.button1.Height = this.Rows[this.CurrentCell.RowIndex].Height;
}
#region 获取X轴的位置
if (this.RowHeadersVisible)
{
//判断该类是否包含行标题,如果该列包含行标题,按钮的横坐标位置等于当前位置加上行标题
p.X += this.RowHeadersWidth;
}
//FirstDisplayedCell表示左上角第一个单元格
for (int i = this.FirstDisplayedCell.ColumnIndex; i <= this.CurrentCell.ColumnIndex; i++)
{
if (this.Columns[i].Visible)
{
//当前位置=单元格的宽度加上分隔符发宽度
p.X += this.Columns[i].Width + this.Columns[i].DividerWidth;
}
}
p.X -= this.FirstDisplayedScrollingColumnHiddenWidth;
p.X -= this.button1.Width;
#endregion
#region 获取Y轴位置
if (this.ColumnHeadersVisible)
{
//如果列表题可见,按钮的初始纵坐标位置等于当前位置加上列标题
p.Y += this.ColumnHeadersHeight;
}
//获取或设置某一列
补充:Web开发 , ASP.Net ,