转载:winform的DataGridView中用C#实现按钮列置灰
2013-03-23 17:08
483 查看
DataGridView 控件包括 DataGridViewButtonCell 类,该类用于显示具有类似按钮的用户界面 (UI) 的单元格。但 DataGridViewButtonCell 不提供禁用由单元格显示的按钮外观的方式。
下面的代码示例演示如何自定义 DataGridViewButtonCell 类来显示可以显示为禁用的按钮。本示例定义一个新的单元格类型 DataGridViewDisableButtonCell,它由 DataGridViewButtonCell 派生。此单元格类型提供一个新的 Enabled 属性,可以将该属性设置为 false 来在单元格中绘制禁用的按钮。本示例还定义一个新的列类型 DataGridViewDisableButtonColumn,它显示 DataGridViewDisableButtonCell 对象。为了演示此新单元格类型和列类型,父 DataGridView 中的每个 DataGridViewCheckBoxCell 的当前值确定同一行中 DataGridViewDisableButtonCell 的 Enabled 属性是 true 还是 false。
首先要在代码中加入下面两个继承类:
datagridview的button控件要在代码里面加入:
如加入编辑按钮:
禁用:
下面的代码示例演示如何自定义 DataGridViewButtonCell 类来显示可以显示为禁用的按钮。本示例定义一个新的单元格类型 DataGridViewDisableButtonCell,它由 DataGridViewButtonCell 派生。此单元格类型提供一个新的 Enabled 属性,可以将该属性设置为 false 来在单元格中绘制禁用的按钮。本示例还定义一个新的列类型 DataGridViewDisableButtonColumn,它显示 DataGridViewDisableButtonCell 对象。为了演示此新单元格类型和列类型,父 DataGridView 中的每个 DataGridViewCheckBoxCell 的当前值确定同一行中 DataGridViewDisableButtonCell 的 Enabled 属性是 true 还是 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; } } public override object Clone() { DataGridViewDisableButtonCell cell = (DataGridViewDisableButtonCell)base.Clone(); cell.Enabled = this.Enabled; return 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) { if (!this.enabledValue) { if ((paintParts & DataGridViewPaintParts.Background) == DataGridViewPaintParts.Background) { SolidBrush cellBackground = new SolidBrush(cellStyle.BackColor); graphics.FillRectangle(cellBackground, cellBounds); cellBackground.Dispose(); } if ((paintParts & DataGridViewPaintParts.Border) == DataGridViewPaintParts.Border) { PaintBorder(graphics, clipBounds, cellBounds, cellStyle, advancedBorderStyle); } Rectangle buttonArea = cellBounds; Rectangle buttonAdjustment = this.BorderWidths(advancedBorderStyle); buttonArea.X += buttonAdjustment.X; buttonArea.Y += buttonAdjustment.Y; buttonArea.Height -= buttonAdjustment.Height; buttonArea.Width -= buttonAdjustment.Width; ButtonRenderer.DrawButton(graphics, buttonArea, System.Windows.Forms.VisualStyles.PushButtonState.Disabled); if (this.FormattedValue is String) { TextRenderer.DrawText(graphics, (string)this.FormattedValue, this.DataGridView.Font, buttonArea, SystemColors.GrayText); } } else { base.Paint(graphics, clipBounds, cellBounds, rowIndex, elementState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts); } } }
datagridview的button控件要在代码里面加入:
如加入编辑按钮:
DataGridViewDisableButtonColumn btn_ProEdit = new DataGridViewDisableButtonColumn(); btn_ProEdit.HeaderText = l.ALanuageBinding("gv_Action"); btn_ProEdit.Text = l.ALanuageBinding("gv_Edit"); btn_ProEdit.Name = "btn_ProEdit"; btn_ProEdit.Width = 50; btn_ProEdit.UseColumnTextForButtonValue = true; this.datagridview1.Columns.Add(btn_ProEdit);
禁用:
DataGridViewDisableButtonCell buttonCell = (DataGridViewDisableButtonCell)dgv_Promotiom.Rows[i].Cells["btn_ProEdit"]; buttonCell.Enabled = false;
相关文章推荐
- C# WinForm下DataGridView单选按钮列和支持三种选择状态的复选框列的实现
- C#WinForm应用程序实现自动填充网页上的用户名和密码并点击登录按钮【转载】
- C# WinForm下DataGridView单选按钮列和支持三种选择状态的复选框列的实现
- C# Winform DataGridView 公共分页实现
- 【转载】c# winform 怎么给程序的按钮上也加上小盾牌图标
- C#中Winform 实现Ajax效果自定义按钮
- 点击button按钮后,启动一个实现鼠标拖动另一个button的线程 (JFrame/C# WinForm)
- [转载]C# winform登陆框验证码的实现
- c#在winform中用DataGridView实现分页效果
- C# Winform DataGridView 公共分页实现
- C#中对Winform中的DataGridView的控制技巧。(单独控制某单元格的按钮不显示、某单元格的ReadOnly)
- C# Winform DataGridView 公共分页实现
- 【转载】C#实现主窗体工具栏上按钮两幅图片的交互效果
- C#实现WinForm随WINDOWS服务一起启动(转载)
- C# Winform DataGridView 公共分页实现
- winform中实现DataGridView的打印,用c#实现
- C# 实现WinForm窗口最小化到系统托盘代码(转载)
- C# Winform DataGridView分页功能的实现
- c#winform datagridview的数据绑定和行的增删改实现
- [转载]在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#)