让DataGridView列不可用(转)

单元格可以设置为只读而不可编辑,但DataGridView 却没提供使单元格不可用的支持。一般意义上,不可用意味着用户不能进行操作,通常会带有外观的暗示,如灰色。没有一种简单的方法来创建那种不可操作的单元格,但提供一个暗示性的外观告诉用户某单元格不可用还是可行的。内置的单元格类型没有进行不可用设置的属性,下面的例子扩展了DataGridViewButtonCell ,参照常见控件的Enabled 属性,为其添加了Enabled 属性,如果该属性设置为false ,那么其外观状态将类似于普通按钮的不可用状态。

public class DataGridViewDisableButtonColumn : DataGridViewButtonColumn

{

   public DataGridViewDisableButtonColumn()

    {

       this.CellTemplate = new DataGridViewDisableButtonCell();

    }

}

 

public class DataGridViewDisableButtonCell : DataGridViewButtonCell

{

   private bool enabledValue;

   public bool Enabled

    {

       get {

           return enabledValue;

        }

       set {

            enabledValue = value;

        }

    }

 

   // Override the Clone method so that the Enabled property is copied.

   public override object Clone()

{

DataGridViewDisableButtonCell cell =

            (DataGridViewDisableButtonCell)base.Clone();

        cell.Enabled = this.Enabled;

       return cell;

    }

 

   // By default, enable the button cell.

   public DataGridViewDisableButtonCell()

    {

       this.enabledValue = true;

    }

 

   protected override void Paint(Graphics graphics,

       Rectangle clipBounds, Rectangle cellBounds, int rowIndex,

       DataGridViewElementStates elementState, object value,

       object formattedValue, string errorText,

       DataGridViewCellStyle cellStyle,

       DataGridViewAdvancedBorderStyle advancedBorderStyle,

       DataGridViewPaintParts paintParts)

    {

       // The button cell is disabled, so paint the border, 

       // background, and disabled button for the cell.

       if (!this.enabledValue)

        {

           // Draw the cell background, if specified.

           if ((paintParts & DataGridViewPaintParts.Background) ==

               DataGridViewPaintParts.Background)

            {

SolidBrush cellBackground =

                   new SolidBrush(cellStyle.BackColor);

                graphics.FillRectangle(cellBackground, cellBounds);

                cellBackground.Dispose();

            }

 

           // Draw the cell borders, if specified.

           if ((paintParts & DataGridViewPaintParts.Border) ==

               DataGridViewPaintParts.Border)

            {

                PaintBorder(graphics, clipBounds, cellBounds, cellStyle,

                    advancedBorderStyle);

            }

 

           // Calculate the area in which to draw the button.

           Rectangle buttonArea = cellBounds;

           Rectangle buttonAdjustment =

               this.BorderWidths(advancedBorderStyle);

            buttonArea.X += buttonAdjustment.X;

            buttonArea.Y += buttonAdjustment.Y;

            buttonArea.Height -= buttonAdjustment.Height;

            buttonArea.Width -= buttonAdjustment.Width;

 

           // Draw the disabled button.               

           ButtonRenderer.DrawButton(graphics, buttonArea,

               PushButtonState.Disabled);

 

           // Draw the disabled button text.

           if (this.FormattedValue is String)

            {

                TextRenderer.DrawText(graphics,

                    (string)this.FormattedValue,

                   this.DataGridView.Font,

                    buttonArea, SystemColors.GrayText);

            }

        }

       else

        {

           // The button cell is enabled, so let the base class

           // handle the painting.

           base.Paint(graphics, clipBounds, cellBounds, rowIndex,

                elementState, value, formattedValue, errorText,

                cellStyle, advancedBorderStyle, paintParts);

        }

    }

转载于:https://www.cnblogs.com/chenl861004/archive/2009/09/07/1561787.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值