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;
                }
            }

           

        }

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C# winform DataGridView中添加按钮

首先,一头雾水,百度之。资料如下: 注意:DataGridView控件是从.NET Framework 2.0版本开始追加的。 在DataGridView的列中想表示和LinkLabel控件...

C# WinForm下DataGridView单选按钮列和支持三种选择状态的复选框列的实现

在C# WinForm下做过项目的朋友都知道,其中的DataGridView控件默认只支持DataGridViewButtonColumn、 DataGridViewCheckBoxColumn...

C#给WinForm(窗体)下DataGridView控件添加单选选或多选按钮列

在c# winform下做过项目的朋友都知道,其中的datagridview控件默认只支持datagridviewbuttoncolumn、datagridviewcheckboxcolumn、dat...

C# WinForm下DataGridView单选按钮列和支持三种选择状态的复选框列的实现

在C# WinForm下做过项目的朋友都知道,其中的DataGridView控件默认只支持DataGridViewButtonColumn、DataGridViewCheckBoxColumn、Dat...

winform datagridview 添加按钮列 行为空时按钮列显示文本

添加按钮列: 在datagridview的tasks中点击Edit columns:如图: 同时保证选中头三个enable项。进入编辑列界面后点击Add按钮添加列如图: 此时展开...

c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)

一、单元格内容的操作  *****// 取得当前单元格内容         Console.WriteLine(DataGridView1.CurrentCell.Value);  ...

c# WinForm开发 有关DataGridView控件数据库连接(存储和删除)的操作

这里主要是复习DataSet等数据或ADO.NET方面的知识。下面是一个简单的数据存储(在DataGridView上增加一行然后并存储到数据库的过程): private void button1_C...
  • lllljz
  • lllljz
  • 2012-04-15 00:09
  • 1152

c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)

一、单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的...

C# WinForm开发系列 - DataGridView 使用方法集锦

1.DataGridView实现课程表 testcontrol.rar   2.DataGridView二维表头及单元格合并 DataGridView单元格合并和二维表头.rar ...

C# WinForm开发系列 - DataGridView

1.DataGridView实现课程表 testcontrol.rar 2.DataGridView二维表头及单元格合并 DataGridView单元格合并和二维表头.rar myMul...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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