WinForm开发中,如何disable DataGridView中的按钮

原创 2006年06月08日 15:14:00

DataGridView比以前的DataGrid好用些了,但也有很多不足:
比如不能像以前一样将一个cell转换为button或textbox,然后对其设置属性。
这里有2种方法来disable一个DataGridView中的按钮。

目的:DataGridView中有一列是button。用来删除当前行的纪录。但不是所有记录都可以删除,需要根据数据源中CanDel列的值来决定,如果=0,则Delete button处于disable状态,否则Delete button 是Enabled。

1 自定义一个buttoncolumn类,继承DataGridViewButtonCell。具体请参考http://msdn2.microsoft.com/en-us/library/ms171619.aspx

 

2 在CellPainting事件中自己重画。听起来挺复杂,实际很简单。下面是我的代码:

        private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {

            //首先判断当前cell是不是delete button
            if (e.ColumnIndex == dataGridView1.Columns["Delete"].Index && e.RowIndex >= 0 && e.RowIndex < (dataGridView1.Rows.Count - 1))
            {

                //如果CanDel = 0,重绘按钮为disable状态
                if ((int)this._CVIS_MainDataSet.CollegeInfo.Rows[e.RowIndex]["CanDel"] == 0)
                {
                    Rectangle newRect = new Rectangle(e.CellBounds.X + 1,
                    e.CellBounds.Y + 1, e.CellBounds.Width - 4,
                    e.CellBounds.Height - 4);
                    using ( Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor),
                            backColorBrush = new SolidBrush(e.CellStyle.BackColor))
                    {
                        //先抹去原来的cell背景
                        e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
                        using (Pen gridLinePen = new Pen(gridBrush))
                        {
                            // 画出上下两条边线,左右边线无需画
                            e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left,
                                e.CellBounds.Bottom - 1, e.CellBounds.Right - 1,
                                e.CellBounds.Bottom - 1);
                            e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
                                e.CellBounds.Top, e.CellBounds.Right - 1,
                                e.CellBounds.Bottom);
                            // 计算button的大小
                            Rectangle buttonArea = e.CellBounds;
                            buttonArea.X += 1;
                            buttonArea.Y += 1;
                            buttonArea.Height -= 2;
                            buttonArea.Width -= 2;

                            // 画按钮
                            ButtonRenderer.DrawButton(e.Graphics, buttonArea,
                                System.Windows.Forms.VisualStyles.PushButtonState.Disabled);

                            // 画文字,用灰色表示disable状态

                            TextRenderer.DrawText(e.Graphics,
                                   (string)bt.Value,
                                    dataGridView1.Font,
                                    buttonArea, SystemColors.GrayText);

                        }
                    }

                   //别忘了这个
                    e.Handled = true;
                }
            }

           

        }

DataGridViewButtonColumn的使用 —…

.Net的DataGridView控件中,提供了一种列的类型,叫 DataGridViewButtonColumn ,这种列类型是展示为一个 按钮,可以给button赋予相应的text,并且,此but...
  • esonbest1234
  • esonbest1234
  • 2016年02月24日 11:39
  • 1186

[zt]C#中DataGridView按钮禁用或不可点的方法(设置Enabled属性)

在项目中进行了使用,很好用。只需要对单元格进行强制转换后设置就可以了,如: ((DataGridViewDisableButtonColumn)dr.Cells["open"]).Enabled =...
  • cqlray
  • cqlray
  • 2011年05月12日 15:46
  • 3818

datagridview 中添加了一个button类型的列,怎么写button的事件

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin...
  • lz465350
  • lz465350
  • 2013年06月04日 18:17
  • 2949

vb.net如何使用代码给DataGridView…

vb.net如何使用代码给DataGridView添加按钮,以下代码将在表格最后一列添加一个“掉站管理原因”按钮    Dim btnEdit As New DataGridViewButtonCol...
  • esonbest1234
  • esonbest1234
  • 2016年02月24日 11:39
  • 900

DataGridView特殊按钮(DisableButtonColumn)

实现的效果如下图,点击一次按钮之后,按钮不可再点击: 主要代码如下: private void AddButtonColumn() { ...
  • sudazf
  • sudazf
  • 2015年08月17日 16:34
  • 1478

VB.Net为DataGridView增加过滤按钮

增加过滤按钮的代码来自CodeProject网站,以下实
  • kaifuzi
  • kaifuzi
  • 2014年11月18日 19:22
  • 704

vb.net datagridview 使用方法

目录:  1、 取得或者修改当前单元格的内容  2、 设定单元格只读  3、 不显示最下面的新行  4、 判断新增行  5、 行的用户删除操作的自定义  6、 行、列的隐藏和删除  7、...
  • lgh1992314
  • lgh1992314
  • 2014年05月23日 23:14
  • 2736

C# winform DataGridView中添加按钮

首先,一头雾水,百度之。资料如下: 注意:DataGridView控件是从.NET Framework 2.0版本开始追加的。 在DataGridView的列中想表示和LinkLabel控件...
  • xyl295528322
  • xyl295528322
  • 2014年04月14日 16:42
  • 6107

【分享】如何设计WinForm中DataGridView控件的自定义按钮列

在信息管理系统的开发过程中,我们常需要将信息显示为一个列表,并在表格的最后一列显示“查看信息”或“修改”、“删除”等按钮。在Asp.Net中我们可以采用Repeater控件方便的实现,但在WinFor...
  • SunCherryDream
  • SunCherryDream
  • 2015年06月06日 12:49
  • 2171

C# DataGridViewButtonColumn的使用—动态改变按钮的文本

.Net的DataGridView控件中,提供了一种列的类型,叫 DataGridViewButtonColumn ,这种列类型是展示为一个 按钮,可以给button赋予相应的text,并且,此but...
  • xxy0403
  • xxy0403
  • 2016年05月20日 08:43
  • 1897
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WinForm开发中,如何disable DataGridView中的按钮
举报原因:
原因补充:

(最多只允许输入30个字)